Разное

Искорке делают укол: Игры Уколы Пони

Не гасите искорку жизни! | Читать свежий выпуск газеты ЧО онлайн и бесплатно — Читинское Обозрение

Каждую осень, как только начинаются настоящие холода, в редакционной почте появляются письма: «Спасите погибающих животных!».

С позапрошлого года, когда в город пришли сотни и сотни кошек и собак из затопленных дач и жилых домов, положение стало просто критическим. В нашем климате выжить без хозяина домашним животным очень, очень сложно. Я знаю в городе многих пожилых людей, которые каждодневно с узелками и посудинами с кормом для кошек и собак двигаются по городу своими маршрутами. Ладно бы, это были капризы не знающих чем себя занять горожан — нет, нет и нет! И не от избытка пенсий или зарплат.

Это — просто совестливые, жалостливые люди, разделившие между собой городские участки, где кто кого прикармливает.

Только не надо, пожалуйста, снова да ладом рассуждать о животных, которые разносят заразу — речь о жучках да шариках, потерявших свой дом, своих хозяев. Мне позвонила женщина, читательница «Читинского обозрения»: «Я живу со взрослой дочерью. У нас четыре кошки, все спасённые с улицы. На днях дочь принесла с улицы погибающую собаку. Она истощена до крайности, непонятно, как вообще до сегодняшних дней дожила. Мы возим её каждый день на капельницы и уколы в ветклинику. Естественно, борьба за жизнь этой бедолаги пробила изрядную брешь в нашем бюджете, но мы надеемся, что собачка выздоровеет. Но я-то не о том, что спасать погибающую живность — дело довольно затратное. В конце концов, это наш выбор. Но я хочу, чтобы вы написали, как одни тратят свои последние копейки, спасая едва тлеющую жизнь, а некоторые эти искорки жизни гасят с большим воодушевлением. Пришла моя соседка и рассказала, что несколько месяцев подряд она в определённое время выходила и кормила несколько бездомных собачонок и кошечек. Это происходило за жилыми домами, никому мои питомцы не мешали. А недавно пришла и увидела всех их застреленными. Они лежали и смотрели в мёрзлое небо застывшими от мороза глазами… А убил их полицейский, который много раз обещал это сделать… Напишите об этом!», — попросила женщина.

Что ж, это несложно. Напишу. Только мы каждый год, не по одному разу пишем об этом, а живодёров не убывает. Не убывает тех, кто готов носиться по городу, высунув язык, лишь бы извести котёнка или щенка. Помню, как один товарищ, врач по профессии, кстати сказать, засыпал известью под крыльцом подъезда только что ощенившуюся собаку… Возможно, он очень хороший врач, но к такому я бы на приём и сама не пошла, и ребёнка своего никогда не повела. Никакие дискуссии ни к чему положительному не приводят: кто-то был и до конца своих дней останется убеждённым живодёром, кто-то погибает от инфаркта, когда убивают кошку или собаку. Таких случаев я знаю немало. Всё, что требуется от господ шариковых — ну, не гасите росточек, искорку жизни около вас. Пусть вы не любите животных — имеете право! Но, пожалуйста, имейте в виду, что кто-то не любит злых, жестоких людей. Им-то что же делать?

Все материалы рубрики “Разговор по душам”
 

Елена Стефанович
Фото: fotostrana.ru
«Читинское обозрение»
№49 (1637) // 02. 12.2020 г.

Вернуться на главную страницу

Авторская колонка


Вы здесь: Авторские колонки FantLab > Авторская колонка «newcomer» облако тэгов
Поиск статьи:   расширенный поиск »

“Махабхарата”, “Рамаяна”, 2019 год, 2020 год, 2021 год, 2022 год, 2023 год, 358, Death Note, WR, Анатомия, В.Цой, Высоцкий…, Депрессия, Из Колизея, Избранное, Императрица Ки, Л., Мальчик со шрамом, Ожидание, Олди, Планы, Призраки будущего, Родное…, СЮ, Урал батыр, Урал-батыр рубаи, Фантлабовские сборники, Экскурс в прошлое, аниме “Монстр”, вне циклов, год корейской поэзии, интересное, коротко о главном, персоналии, планы, по произведениям Дж. Мартина, прочитано в новом году, прочитано и просмотрено в новом году, рассказы, стихотворный тандем, хоккейное творчество


либо поиск по названию статьи или автору: 

Страницы:  1 [2] 3

newcomer

«Дыхание вечности»

Статья написана 23 июня 2009 г. 23:13

Размещена:
  • в авторской колонке newcomer

И любовь, как дыхание
вечности,
Налетит-закружит,
заметелится…


Звонок мобильного телефона вырывает меня из объятий предутреннего сна… Кто это может быть в такую-то рань?
Номер незнакомый. Чертыхнувшись, сбрасываю вызов. Не тут-то было: спустя минуту звонок раздается снова… Какая настойчивость!
– Алло! – раздраженно отвечаю я, окончательно расставшись с надеждой еще немного поспать.
– Привет… Это я…
Женский голос. До боли знакомый и одновременно такой далекий… Одно бесконечно долгое мгновение я пытаюсь вспомнить, где я слышал его раньше. Не может быть!
Ты почти забыл о ней… Слишком много времени прошло с вашей последней встречи. Вы повзрослели и стали другими…
– Привет…
– Извини, что разбудила тебя, но…
– Да нет, все нормально. – Сон слетел окончательно. – Просто не ожидал твоего звонка.
Не ожидал… Точнее – не ждал совсем. Ты вычеркнул прошлое из жизни, дружок, а оно возьми да и напомни о себе в самый неподходящий момент…
– Мне очень нужно сказать тебе кое-что… – голос едва заметно дрогнул. – Очень важное…
– Ну так мы, это… разговариваем уже.
– В парке, возле старой березы… ты помнишь наш тогдашний разговор?
Конечно помнишь! Тебя ж после того дня будто подменили… Сколько лет уже забыть пытаешься, а в итоге что? Ох, изведешь ты себя, парень!
– Каждое слово… – Ком подкатывает к горлу от воспоминаний. Хорошо, что мы не видим друг друга сейчас. – Скажи, зачем ты снова об этом?
– Прости меня… Мы оба наговорили много ужасных вещей друг другу, но…
– Да чего уж теперь говорить….
– Значит… все?
– Ну извини… так порой бывает. Ты знала о моих чувствах к тебе, но предпочла остаться друзьями. И так будет лучше для нас обоих.
– Да, наверное… Спасибо…
А у тебя характерец еще тот! Вот только любит она… Тебя любит. Что ж, лучше поздно, чем никогда…

24.06. 2009


Тэги: рассказы

newcomer

«Я с тобой…» (записки из дневника)

Статья написана 8 июня 2009 г. 20:00

Размещена:
  • в авторской колонке newcomer

26.06.2009

Зверем раненым
я вздрогну от шороха…
Не шевелись!
О, как же он сладок –
ужас в твоих глазах…

Зверь проиграл
и посажен на цепь
В вашем мире несбывшихся мечт…

Солнечный летний день, легкий ветерок резвится в кронах деревьев, слышен смех детей, играющих неподалеку… Ты идешь мне навстречу, лучась от счастья, протягиваешь руки, а я… Я делаю шаг, другой, и вдруг спотыкаюсь, падаю…

И просыпаюсь в холодном поту. Идиллия уступает место реальности.

Гематомы на ногах еще не сошли, чувствительность от таза до колен – нулевая, хоть ножом режь – не замечу. Это ненадолго, но тем не менее…

Ты сидишь на краю кровати и улыбаешься. А в глазах стоят слезы…

Я избегал разговоров о предстоящей операции, боясь потерять тебя. Но ты и сама понимала, что нельзя по-другому. Нет, ты не заламывала руки в истерике: «Что же теперь с нами будет?»; не замкнулась в себе, и даже не хлопнула дверью, давая понять, что все кончено…

Просто взяла меня за руку и одними губами сказала:

«Я с тобой…»

27.06.2009

С тех пор как ты появилась в моей жизни, время как будто остановилось и превратилось в одно сплошное «сегодня». Но я все еще ставлю даты в дневнике – привычка…

А ведь я долго не решался подойти к тебе и заговорить первым, а ты смущенно опускала глаза всякий раз, когда наши взгляды случайно пересекались…

Так продолжалось бы еще Бог знает сколько времени, если бы не старик в белой чалме. Точнее, его портрет на обложке книги, которую я подарил тебе на день рождения.

«Красота дуновению ветра сродни…»

Иногда мне кажется, что он знает все о нас двоих…

29.06.2009

Моя первая самостоятельная прогулка. Шаги мелкие, неуверенные… Прочь костыли! Стиснув зубы, преодолевая боль… Дойду! Сам…

Пара метров до скамейки в парке показались мне дорогой в Ад.

Да не смотри же на меня ТАК! Знаю, что похож сейчас на беспомощного котенка – не жалей… Кто угодно, только не ты! Мне не нужна жена, у которой постоянно глаза на мокром месте.

Удивлена? Почему, разве я что-то не то сказал? Прости, я хотел сделать тебе предложение в более подходящее время, но…

“Я люблю тебя!” — как давно я не говорил этих слов… Я-другой, оставшийся в прошлой жизни, наверняка завалил бы тебя романтическими признаниями; Я-сегодняшний более мрачен и прямолинеен.

В клочья разорви
мое одиночество;
Открой окно –
пусть ветер развеет
Пепел того, кто был
тысячу лет
бледной тенью меня
В вашем мире
несбывшихся мечт…

Не говори ничего — просто возьми меня за руку. ..
08-09. 06. 2009


Тэги: рассказы

newcomer

«Жизнь вопреки…» (Записки из дневника)

Статья написана 20 мая 2009 г. 20:49

Размещена:
  • в авторской колонке newcomer

22. 05. 2009 года.
Запись первая. За день до операции.

Вы знаете, что такое ждать? Нет? Что ж, вам в какой-то мере повезло… Вы, друзья мои, счастливы в своем неведении будущего. Мне же только это и остается – ЖДАТЬ… И я готов к этому. Я так думаю, что готов, а на самом деле…

Впрочем – обо всем по порядку.

Мое рождение, наверное, можно назвать случайным, но только лишь по одной единственной причине – меня ждали на два месяца позже. Однако сие обстоятельство считаю скорее положительным, нежели отрицательным, так как совсем недавно я узнал, что мне не суждено было появиться на свет.

Но видно в книге моей судьбы кто-то случайно (а может быть, и нет?) написал большими буквами «ИСПРАВЛЕННОМУ ВЕРИТЬ»…

Однако, спешка Высших сил не прошла бесследно: кое-какие «недоработки» обнаружились, когда мне исполнилось два года… Именно их мне и предстоит исправить.

Завтра…

23. 05. 2009
Запись вторая. Три буквы, изменившие мою жизнь…

О том, что тогда со мной произошло, думаю, не стоит расписывать подробно – в конце концов, это дневник, а не медицинский справочник.

Детский церебральный паралич. ДЦП.

Вам страшно, друзья мои? А мне – уже нет, ибо я с этим живу…

До операции семь часов. Не спится… Еще успею.

Молочно-белые стены больничной палаты давят на грудь, стесняя дыхание; слезы сами наворачиваются на глаза, но я безжалостно утираю их – ХВАТИТ!

Вчера вечером (будто в насмешку) в моей палате поставили новенький шкаф-купе с зеркалом посередине. Ненавижу зеркала! Отражение теперь неотступно следит за мной – безмолвный свидетель моего одиночества…
Нарочито медленно, выверяя каждый шаг (идти прямо – непростая задача, если левая нога короче правой на три сантиметра) подхожу к нему и улыбаюсь:
«В конце концов, ты – всего лишь мое отражение, приятель!»

Тот же день.
Запись третья. Воспоминания.

У меня еще есть время – операция назначена на 13.00 Впрочем, я уже давно научился игнорировать суеверия. Потому что вся моя жизнь – вопреки…

Почему так? Постараюсь ответить в двух словах, ибо воспоминания об этом отнюдь не доставляют мне удовольствия.

Оказывается, преждевременные роды – это еще не самое страшное. Куда более опасна неопытная акушерка (два месяца работы, только-только после мединститута), эти самые роды принимающая. Мне повезло, правда? Я тоже так думаю…
Дальше было вообще весело: кое-как спеленав, меня попросту забыли на пеленальном столике. О причинах сего, мягко говоря, недоразумения моей матери никто не соизволил сообщить; только недавно я узнал о том, что «новорожденный настолько слаб, что шансов на выживание – минимум…»

Вам снова страшно? А мне – уже нет, ибо я прошел через это…

На шестой день после рождения (была суббота – странно, не правда ли?) нас с мамой выписали из роддома, что означало: «выживай, если сможешь».

Я – выжил.

Тот же день. 10-00.
Запись четвертая. Школьные годы – чудесные?

Для того, чтобы поблагодарить человека, достаточно одного слова…

Не знаю, жива ли еще моя первая учительница, но здесь я хочу выразить ей огромную признательность за то, что ввела меня во взрослую жизнь, в буквальном смысле слова, за руку… Ибо школа была обычная, не коррекционная, и завоевать свое место среди других детей было бы сложно, если бы не Александра Терентьевна.

Мне повезло в очередной раз…

Тот же день. 12-00
Запись пятая. Другой…

Если вы спросите, сколько мне лет, скорее всего я вам отвечу – восемь. Потому что первые восемнадцать лет моей жизни пролетели в бесконечных переездах из одной больницы в другую.

До операции – ровно час.

Сижу на кровати и рассматриваю себя в зеркало. Тот же я – ничего нового…

Поставив мне страшный диагноз, врачи просчитались в одном: они думали, что я буду похож на тех, кому не повезло. Вы видели когда-нибудь человека, больного ДЦП? Если нет, то и не стоит – впечатления останутся еще те…

Я начал осознавать, что не похож на них еще в школе. Никаких поблажек, кроме освобождения от уроков физкультуры и труда, у меня не было; в остальном – стандартные учебные нагрузки. Хотя поднапрячься все же приходилось: по два-три раза в год мотаться по больницам, а потом догонять…

Аттестат я получил без троек, а институт окончил с отличием. С абсолютно лучшим результатом – 4,98 балла.

То, что я не похож на вас, меня не особо огорчает; гораздо более важно, что я не такой, как ОНИ.

Счастливое стечение обстоятельств.

Тот же день. 13-00
Запись шестая. Старик в белой чалме.

Меня готовят к операции. Их – четверо: мужчина и три женщины; лица скрыты под масками. Переговариваются шепотом, чтобы я не слышал деталей, но я знаю, что будет – не впервой…

«Готово!» – говорит мужчина и велит лечь на каталку. – «Сейчас мы немного прокатимся…» Неужели он думает, что перед ним – маленький ребенок?

«Сорок проколов от таза до пяток» – это уже женщина. Она идет за моей спиной, я ее не вижу, но голос мне понравился: мягкий, успокаивающий, будто ветерок прошелестел. – «До вечера должен оклематься».

Ага, а назавтра – домой. Новый метод удаления мышечных узелков с помощью лазера позволяет обходиться без гипса и долгих восстановительных процедур. Три недели постельного режима – и можно вставать на ноги.

Операционный стол. Мужчина поворачивает мне голову и говорит, чтобы я не смотрел на свет ламп.

Укол. Кислородная маска. Погружение в темноту…

И старик в белой чалме. Кто он – я не знаю. Эта – уже пятая операция, но никогда прежде я не видел его в своих снах.
Старик берет меня за руку и ведет по темному коридору, что-то напевая себе под нос.

Луч света. Мы входим в него, и тут начинается нечто невообразимое: темнота оживает и пытается дотянуться до меня сотнями крючковатых пальцев, хочет вырвать в Никуда, и только близость старика удерживает меня Здесь. Он беззвучно шевелит губами и светлый круг понемногу расширяется. Не в силах больше смотреть на то, что происходит, я падаю на пол… Старик укрывает меня собственным халатом и исчезает.

«Мы теряем его, доктор!» – пробивается сквозь туман подсознания женский голос. – «Дефибрилляторы, быстрее!»

Я вернулся…

Три недели спустя.
Запись седьмая. Вместо эпилога.

Матом ругаясь
От боли и счастья,
Снова учусь ходить…20-24. 05. 2009


Тэги: рассказы

newcomer

«Дембель»

Статья написана 19 апреля 2009 г. 21:42

Размещена:
  • в авторской колонке newcomer

…Полтора года жизни остались в прошлом, о чем только что возвестил скрип давно не смазанных петель. Ты вышел за ворота, вдохнул полной грудью пьянящий воздух и потянулся.

Как же легко дышится-то!

Теперь – на вокзал.

Нервно теребя дрожащими от волнения пальцами билет, находишь свой вагон… Несколько томительных минут ожидания, и вот, наконец, поезд тронулся. Мерный перестук колес убаюкивает, но ты пересиливаешь себя и напряженно всматриваешься в проплывающий мимо унылый пейзаж. Странное дело: на дворе весна, а природа не радует… Потому что – чужая. Казалось бы, какая разница, но…

Под вечер ты сдаешься и засыпаешь. Неспокойный, рваный сон – как раз под стать тому, что сейчас происходит у тебя в душе. Скорее, ну скорее же! Что для тебя какая-то тысяча с небольшим километров? Около полутора суток пути, включая остановки – но это все неважно сейчас…

Я уже двадцать лет тебя как облупленного знаю, а ты все не перестаешь меня удивлять. Ну сколько раз я тебе говорил: позвони мне! Приеду, встречу… И что? Опять забыл! Эх ты, дырявая голова!

Помнишь, как в детстве мы рассказывали друг другу страшилки, а взрослые ругались за то что шушукаемся и мешаем им спать? А как мы тайком таскали сигареты, забытые кем-нибудь из взрослых, а потом говорили, что несколько штук «случайно» упали в грязь? Помнишь, я знаю. Тогда нам казалось, что мы – крутые парни.

Да, веселое было время…

С детства мы были единым целым: ты – тело, я – голова. Ты – веселый и жизнерадостный, энергичный; я – серьезный, рассудительный, вдумчивый. Но за проступки доставалось обоим. Мы – вместе. Всегда. И это правило не обсуждается.

Потому что ты – мой брат…


Тэги: рассказы

newcomer

Диалог

Статья написана 27 февраля 2009 г. 21:26

Размещена:
  • в авторской колонке newcomer

– …наконец, это случилось – ты обрел свободу.
События сегодняшнего утра проплывают перед глазами, словно в тумане. Помню только, что дорогу передо мной пробежала черная кошка, а это, как известно, плохая примета. Не обрати я на это внимание – все пошло бы по-другому, но… Впрочем – к чему теперь сомнения? Ты явил себя миру, как ни печально это сознавать. Но еще печальнее признаться самому, что мне страшно.
На довольно долгое время мне удалось избавиться от тебя, но проклятые стрессы и нервозная обстановка на работе все-таки взяли свое: ты, дремавший в самом потаенном уголке ЕГО души, снова напомнил о своем существовании.
А я всего-то на мгновение отвлекся… О том, что это едва не стоило мне крыльев, ЕМУ лучше не знать.
— О, да! Теперь меня ничто не держит внутри клетки, что гордо именуется ЕГО телом! Ты только глянь на это убожество: где горделивая осанка, искорка жизни во взгляде; когда ОН смеялся в последний раз, или на худой конец, улыбался?
Не помнишь… Плохо работаешь, дружище!
Вот ты обвиняешь во всем меня, а ведь сам палец о палец не ударил, чтобы исправить ситуацию. Ты же даже подходящую пару ЕМУ не подыскал! Глядишь, развеялся бы немного, ожил… Вот и пришлось взять ситуацию в свои руки, вернее – когти.
— То, что сегодня произошло, называется «взять ситуацию в свои…»? Да я еле поспевал за тобой, чтобы равновесие удержать! Я уж было подумал, что ОН всех на месте испепелит!
— А что в этом плохого? Надо же было ЕГО как-то встряхнуть, а тут как раз случай подходящий представился. Ну, выпустил пар, сказанул пару матерных (исключительно к месту)… так ведь не угробил никого, даже мебель не порушил. Моя школа! Я ж его как учил: человек – существо хрупкое, когтем ткни – сломается. Драка – дело хлопотное, да и на здоровье сказывается; а ОН нам с тобой пуще воздуха нужен… Хотя о чем это я?
Слово – оно ведь тоже силу имеет, причем немалую. Сказал – как выстрелил. Вот ты, дружище, тоже словами играть мастер, да только у тебя мыльные пузыри одни – разве что девкам смазливым по ушам ездить…
Ладно, позже договорим – видишь, просыпается, гер-рой! Ну — прячемся скорее, рано еще ЕМУ на глаза-то показываться. Время придет — познакомимся. Только чур, я первый поздороваюсь!
— Эй, с крыльями-то аккуратнее, чай не казенные! Да не толкайся же ты, не один тут! Вот батю твоего кликну – тотчас угомонит! Глаза у него горели, понимаешь!
27. 02. 2009
PS. Надеюсь, все понятно без лишних слов, кто есть ху в этой маленькой истории…


Тэги: рассказы

Страницы:  1 [2] 3

Внедрение зависимостей с помощью Spark. Внедрение зависимостей — отличный дизайн… | Мэтью Пауэрс

Чтение: 3 мин.

·

25 июня 2019 г.

Внедрение зависимостей — это шаблон проектирования, позволяющий писать код Spark, более гибкий и простой для тестирования.

В этом сообщении блога представлен код с зависимостью, показано, как внедрить путь как зависимость, а затем показано, как внедрить весь DataFrame.

Код с зависимостью

Давайте создадим withStateFullName метод, который добавляет столбец state_name в DataFrame.

  def  withStateFullName()(df: DataFrame): DataFrame = {
val stateMappingsDF = spark
.read
.option( "заголовок" , правда )
. csv(Конфигурация get ( "stateMappingsPath" ))
df
.join(
широковещательная рассылка (stateMappingsDF),
df( "state" ) <=> stateMappingsDF( "state_abbreviation" ),
"left_outer"
)
.drop( "state_abbreviation" )
}

withStateFullName 90 016 добавляет к столбцу state_name широковещательное соединение.

withStateFullName зависит от объекта Config . withStateFullName «имеет зависимость». Это зависимость, которая будет «внедрена».

Объект Config определяется следующим образом:

  объект  Config { 

val test : Map[String, String] = {
Map (
"stateMappingsPath" -> 900 21 новый java.io.File ( с"./ src/test/resources/state_mappings. csv" ).getCanonicalPath
)
}

val производство : Map[String, String] = {
Map ( 9 0023 "Путь Маппингсостояния" -> " s3a://some-fake-bucket/state_mappings.csv"
)
}

переменная среда = sys. env .getOrElse( "PROJECT_ENV" , "производство" )

def get(key: String): String = {
if ( 9002 6 среда == "тест" ) {
test (key)
} else {
production (key)
}
}

}

Проекты Scala, если вам интересно узнать об этом подробнее шаблон дизайна.

Давайте определим файл src/test/resources/state_mappings.csv , чтобы мы могли запустить метод withStateFullName для некоторых выборочных данных.

 state_name,state_abbreviation 
Tennessee,TN
New York,NY
Mississippi,MS

Запустите метод withStateFullName .

  val  df =  Seq  ( 
( "джон" , 23, "TN" ),
( "салли" , 48, 9 0021 "Нью-Йорк" )
).toDF( "first_name" , "возраст" , "состояние" )

df
.transform(withStateFullName())
.show()+----------+---+- ----+----------+
|first_name|age|state|state_name|
+----------+---+-----+----------+
| Джон| 23| Теннесси | Теннесси|
| вылазка| 48| Нью-Йорк | Нью-Йорк|
+----------+---+-----+----------+

Рефакторинг с StateFullName , чтобы он не зависел от Объект конфигурации . Другими словами, давайте удалим Config зависимость от withStateFullName с шаблоном разработки внедрения зависимостей.

Внедрение пути

Давайте создадим метод withStateFullNameInjectPath , который принимает в качестве аргумента путь к данным сопоставления состояний.

  def  withStateFullNameInjectPath( 
stateMappingsPath: String = Config. get ( "stateMappingsPath" )
)(df: DataFrame): DataFrame = {
90 021 значение stateMappingsDF = spark
.read
.option( "header" , true )
.csv(stateMappingsPath)
df
.join(
широковещательная рассылка (stateMappingsDF),
df( "состояние" ) < => stateMappingsDF( "state_abbreviation" ),
"left_outer"
)
.drop( "state_abbreviation" )
}

Состояние MappingsPath использует интеллектуальное значение по умолчанию, поэтому пользователи могут легко использовать эту функцию без явно ссылаясь на путь. Этот код является более гибким, поскольку он позволяет пользователям переопределять интеллектуальные значения по умолчанию и использовать любые stateMappingsPath при запуске функции.

Давайте полагаться на смарт по умолчанию и запустить этот код.

  val  df =  Seq  ( 
( "джон" , 23, "TN" ),
( "салли" , 48, 9 0021 "Нью-Йорк" )
).toDF( "first_name" , "возраст" , "состояние" )

df
.transform(withStateFullNameInjectPath())
.show()+----------+---+-- ---+----------+
|first_name|age|state|state_name|
+----------+---+-----+----------+
| Джон| 23| Теннесси | Теннесси|
| вылазка| 48| Нью-Йорк | Нью-Йорк|
+----------+---+-----+----------+

Метод withStateFullNameInjectPath не зависит от Config объект.

Внедрение всего DataFrame

Давайте еще раз рефакторим код, чтобы вставить весь DataFrame в качестве аргумента, снова с разумным значением по умолчанию.

  по определению  withStateFullNameInjectDF( 
stateMappingsDF: DataFrame = spark
. read
.option( "header" , true )
.csv(Config. get ( "stateMappingsPath " ))
)(df: DataFrame): DataFrame = {
df
.join(
широковещательная рассылка (stateMappingsDF),
df( "state" ) <=> stateMappingsDF( "state_abbreviation" ),
"left _outer"
)
.drop( "состояние_аббревиатура" )
}

Этот код обеспечивает ту же функциональность, но еще более гибкий. Теперь мы можем запустить функцию с любым DataFrame. Мы можем прочитать файл Parquet и запустить этот код или создать DataFrame с по DF в нашем наборе тестов.

Давайте переопределим интеллектуальное значение по умолчанию и запустим этот код в нашем наборе тестов:

  val  stateMappingsDF =  Seq  ( 
( «Теннесси» , «TN» ), 9 0023 ( "Нью-Йорк" , "NY" )
). toDF( "state_full_name" , "state_abbreviation" )

val df = Seq (
( "john" , 23, "TN" 9 0022 ),
( "вылазка" , 48 , "NY" )
).toDF( "first_name" , "возраст" , "штат" )

df
.transform(withStateFullNameInjectDF(stateMappingsDF)) 900 23 .показать()+---- ------+---+-----+----------------+
|first_name|age|state|state_full_name|
+----------+---+-----+---------------+
| Джон| 23| Теннесси | Теннесси|
| вылазка| 48| Нью-Йорк | Нью-Йорк|
+----------+---+-----+----------------+

Внедрение всего DataFrame в качестве зависимости позволяет нам проверить наш код, не читая из файла. Избегание файлового ввода-вывода в наборе тестов — отличный способ ускорить выполнение тестов.

Этот шаблон проектирования также делает ваши тесты более читабельными. Вашим коллегам не нужно будет открывать случайные CSV-файлы, чтобы разобраться в тестах.

Вывод

Внедрение зависимостей можно использовать для создания более гибкого и легко тестируемого кода.

Мы перешли от кода, основанного на CSV-файле, хранящемся по определенному пути, к коду, достаточно гибкому для запуска с любым фреймом данных.

Перед производственной реализацией этого кода было бы неплохо выполнить некоторые проверки DataFrame (как на базовом DataFrame, так и на внедренном DataFrame) и сделать код еще более гибким, сделав его независимым от схемы.

Обязательно используйте этот шаблон проектирования, чтобы вам больше не приходилось читать файлы CSV/Parquet в вашем наборе тестов!

scala - Apache Spark - Можно ли использовать механизм внедрения зависимостей

Фреймворк neutrino точно соответствует вашим требованиям.

Отказ от ответственности: я являюсь автором платформы нейтрино.

Это основанная на Guice среда внедрения зависимостей для apache spark, предназначенная для облегчения работы по сериализации при разработке. В частности, он будет выполнять работу по сериализации/десериализации для объектов, сгенерированных DI, автоматически в процессе передачи объекта и восстановления контрольной точки.

Вот простой пример (просто отфильтруйте поток событий на основе данных Redis):

 trait EventFilter[T] {
    def filter(t: T): логическое значение
}
// Класс RedisEventFilter напрямую зависит от JedisCommands,
// и не расширяет интерфейс `java.io.Serializable`.
класс RedisEventFilter @Inject()(jedis: JedisCommands)
расширяет EventFilter[ClickEvent] {
   переопределить фильтр определения (e: ClickEvent): Boolean = {
       // логика фильтрации на основе Redis
   }
}
/* создаем инжектор */
вал форсунки = ...
val eventFilter = инжектор.экземпляр[EventFilter[ClickEvent]]
val eventStream: DStream[ClickEvent] = ...
eventStream.filter(e =>
eventFilter.filter(e))

Вот как настроить привязки:

 class FilterModule(redisConfig: RedisConfig) extends SparkModule {
   переопределить определение configure(): Unit = {
       // волшебство здесь
       // Метод withSerializableProxy сгенерирует прокси
       // расширение интерфейсов `EventFilter` и `java. io.Serializable` с помощью макроса Scala.
       // Модуль должен расширять `SparkModule` или `SparkPrivateModule`, чтобы получить его
       bind[EventFilter[ClickEvent]].withSerializableProxy
           .to[RedisEventFilter].in[SingletonScope]
   }
}
 

С нейтрино RedisEventFilter даже не заботится о проблеме сериализации. Все работает как в одной JVM.

Как мы знаем, чтобы принять структуру DI, нам сначала нужно построить граф зависимостей, который описывает отношения зависимости между различными типами. Guice использует Module API для построения графика, в то время как среда Spring использует XML-файлы или аннотации. Нейтрино построен на основе фреймворка Guice и, конечно же, строит граф зависимостей с помощью API модуля guice. Он не только сохраняет график в драйвере, но и запускает один и тот же график на каждом исполнителе.

В графе зависимостей некоторые узлы могут генерировать объекты, которые могут быть переданы исполнителям, и платформа neutrino назначит этим узлам уникальные идентификаторы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *