@hadoopusers

Страница 145 из 182
Евгений
14.09.2018
23:15:42
файлы мы из hdfs берем, кстати
файлы ещё можно читать из хдфса спарком одновременно просто как набор)

Александр
14.09.2018
23:16:18
ну да, вообще возьми имена распаралель и считай их на разных машинах и потом запроцессь
так ? val process: String => Unit // через цепочку String => RDD[data] => Unit sc.parallelize(files).map(process)

Евгений
14.09.2018
23:16:32
а где файлы-то лежат?

в одной папке?

Google
Александр
14.09.2018
23:17:15
нет, много папок и подпапок

Grigory
14.09.2018
23:17:41
так ? val process: String => Unit // через цепочку String => RDD[data] => Unit sc.parallelize(files).map(process)
у тебя имена которые грузишь; sc.parellilize(names).repartition(кол-во партиций).foreach / foreachPartition (process)

кол-во патриций зависит от ковло файлов и колва ехекуторов

Евгений
14.09.2018
23:18:10
нет, много папок и подпапок
их можно задать регулярным выражением?

Александр
14.09.2018
23:18:13
да

они регуляркой и задаются

Евгений
14.09.2018
23:18:26
ну тогда проще некуда

Grigory
14.09.2018
23:18:28
ну и все)

Евгений
14.09.2018
23:18:40
spark.read.csv("регулярка")

Александр
14.09.2018
23:18:51
сейчас так sc.textFile(day)

Евгений
14.09.2018
23:18:59
хочешь сделать по красоте - фигачь на датафрейм апи)

Grigory
14.09.2018
23:19:04
spark.read.csv("регулярка")
а он не в 200 патриций загонит все?

Александр
14.09.2018
23:19:40
а партицировать нужно чтобы лучше делилось между воркерами ? кусочки поменьшее были ?

Google
Евгений
14.09.2018
23:19:43
не, если дохрена данных, то будет размер данных / 128мб

Александр
14.09.2018
23:20:00
хорошо я зашел спросить, спасибо сообществу, так бы дураком и умер

Евгений
14.09.2018
23:20:12
если терабайт, то соответственно инпут сплитов будет 80к

вполне хватает)

можно и подтюнить, если так хочется

можно даже сменить 200 на что-нибудь другое, например на число ядер, отданных джобе)

Grigory
14.09.2018
23:21:52
ну, датафреймы будут быстрее и по красоте, если ему не надо будет выводить 100% считанных данных

Так то да; наверное через csv + регулярку все заработает

Евгений
14.09.2018
23:22:54
быстрее писать код на 500 тыщ процентов

Grigory
14.09.2018
23:23:05
У меня ощущение что прям для такого случая и придумали эту функцию

Евгений
14.09.2018
23:23:25
там небось в map написано line.split(",")?

Grigory
14.09.2018
23:23:43
быстрее писать код на 500 тыщ процентов
пока не придётся гадать почему схема партицирования такая странная

Евгений
14.09.2018
23:24:14
а их и будет 200
ну дык потому что у всех на кластерах по 200 коров, а если больше, значит народу дохрена)

Александр
14.09.2018
23:24:33
так-с

Grigory
14.09.2018
23:24:46
Александр
14.09.2018
23:24:50
где почитать код с нормальной обработкой csv с hdfs чтобы вас вопросами не мучать ?

Google
Александр
14.09.2018
23:24:56
я бы посмотрел бы код и нормально сделал

Grigory
14.09.2018
23:25:19
Csv, нормально и хдфс в одном предложении - это перебор ):

Нутпопробуй csv функцию юзать как подсказал Евгений

Александр
14.09.2018
23:25:53
я потому на паркет и перепиливаю, но старые поставщики пока на cvs

Евгений
14.09.2018
23:25:54
https://docs.databricks.com/spark/latest/data-sources/read-csv.html

Grigory
14.09.2018
23:25:54
думаю оно само заработает лучше чем сейчас у тебя

Александр
14.09.2018
23:26:44
спасибо, буду завтра палкой тыкать

Евгений
14.09.2018
23:26:53
и вообще про spark sql почитай, забудешь про rdd и про ручной парсинг, как про страшный сон

а потом через два года будешь вспоминать, потому что дефолтный жисон парсер не справился?

Александр
14.09.2018
23:27:22
есть ощушение что таска запилить паркет превратиться в переписать все к чертовой матери

Grigory
14.09.2018
23:27:47
есть ощушение что таска запилить паркет превратиться в переписать все к чертовой матери
Ну да у тебя очевидно что датасеты юзать и скуль апи спарка над

Евгений
14.09.2018
23:27:48
ну rdd не работают с паркетами

Grigory
14.09.2018
23:27:57
Евгений
14.09.2018
23:28:31
ага, rdd.toDF().write.format("parquet")?

и наоборот)

Grigory
14.09.2018
23:28:50
)) можно не использовать спарк апи же

Александр
14.09.2018
23:28:50
ну rdd не работают с паркетами
на это у меня уже тестик написан, можно при желании перегнать =)

Евгений
14.09.2018
23:29:53
все работает
у спарк-контекста нет метода чтения паркета, он есть только у спарк-сессии

Google
Евгений
14.09.2018
23:30:54
ну, всё равно придётся считать в датафрейм, а потом преобразовывать его в rdd

Grigory
14.09.2018
23:31:01
нет

Евгений
14.09.2018
23:31:31
нет
пандасом что ли?)

Их можно конвертнуть
проще всего воспользоваться датафрейм апи. После чтения файлов на любом этапе можно сделать df.rdd, и продолжить использовать старый код

Grigory
14.09.2018
23:33:12
пандасом что ли?)
паркет на прямую юзаешь, яж написал выше

Евгений
14.09.2018
23:33:16
единственная проблема, что это будет RDD[Row], что конечно же весьма неудобно, и нужно его будет конвертнуть, вытазить оттуда типы

Grigory
14.09.2018
23:33:33
у меня был случай когда дешевле было и эффективнее без спарк скуля все делать

Косяк что напрямую паркет апи и свои инпут форматы считай делать надо

Евгений
14.09.2018
23:34:39
если там такой код, то проще переписать)

Александр
14.09.2018
23:34:39
На фоне всего остального

Евгений
14.09.2018
23:36:09
не поделитесь инфой, где такое наследие обнаружили?)

Александр
14.09.2018
23:36:19
Нет, извини.

Не офф место работы даже

Евгений
14.09.2018
23:36:49
без проблем)

ну хоть надежда есть, что что-нибудь поменяется)

Александр
14.09.2018
23:37:39
Ты же знаешь Scala, глянь одним глазом...говорили они, я видел все возможные варианты плохого кода думал я)))

Из плюсов - кода мало и есть приятный чат

Google
Grigory
14.09.2018
23:38:31
Сами глину намесят, а потом ругаются что на спарках плохая скала :/

Александр
14.09.2018
23:41:23
Не ругаются) бизнесс устраивает все

На с++ было медленно, теперь все быстро

Поставщик поменял формат и появилась необходимость потрогать

ну тогда проще некуда
возвращаясб к хорошему доброму вечному =) паркет же я тоже могу регуляркой всосать ?

ss.read.parquet("hdfs://parquet/*")

Евгений
15.09.2018
16:50:22
Да, конечно

А можно и без звёздочки, просто папку

Или там внутри тоже папки?

ss.read.parquet("hdfs://parquet/*")
давайте все вместе для единообразия договоримся называть спарк-сессию так, как в документации, а именно просто spark)

Александр
15.09.2018
17:20:01
Евгений
15.09.2018
17:20:41
ну в общем звёздочка должна обозначать набор папок последнего уровня

дайте угадаю, папки типа год/месяц/день?)

Александр
15.09.2018
17:21:55
Ога

Страница 145 из 182