Size: a a a

2021 December 07

k

kvadratura in Moscow Spark
хорошо хоть, в java.sun не нужны будут упражнения, верно?
источник

A

ANatoly in Moscow Spark
java.sun. в крайнем случае)
источник

CO

Chern Oleksander in Moscow Spark
всем привет ))

А не подскажите, ко мне прилетает вот такое
чудо
[('', '14834', 'FB'), ('p35460'), ('p35079', 'SA', 'FB')]

схема вот такая
my_schema = StructType([ \
   StructField("col1", StringType(), True), \
   StructField("col2", StringType(), True), \
   StructField("col3", StringType(), True) \
 ])

получаю ошибку
StructType can not accept object 'p35460' in type <class 'str'>

а как её красиво можно победить, в голову приходит только, чтобы проверить каждый елемент списка и по потребности добавлять не достоющий айтем (
источник

k

kvadratura in Moscow Spark
никак, насколько я помню. нужен явный None в туплах. можно еще попробовать загрузть как единственное поле из массивов разной длины. благо они все - стринги, а потом - explode()
источник

k

kvadratura in Moscow Spark
получаете ошибку где именно? при вызове createDataFrame?
источник

CO

Chern Oleksander in Moscow Spark
при show()
источник

BD

Bakhruz Dzhafarov in Moscow Spark
Не совсем по теме вопроса, но если это кортеж, то ('p35460’, ) а не ('p35460’). По идее тогда и  вывод ошибки должен будет измениться
источник

k

kvadratura in Moscow Spark
вот так можно загрузить в эррэй
>>> d3 = [(('1',),), (('1', 'a'),), (('b', 'c', 'd'),)]
>>> d3
[(('1',),), (('1', 'a'),), (('b', 'c', 'd'),)]
>>> df = spark.createDataFrame(d3, schema)
>>> df.show()
+---------+                                                                    
|      col|
+---------+
|      [1]|
|   [1, a]|
|[b, c, d]|
+---------+
источник

k

kvadratura in Moscow Spark
но, возможно, коллега выше прав - ('p35460') будет просто 'p35460'
источник

k

kvadratura in Moscow Spark
и ошибка именно поэтому. хотя я попробовал правильный тупл дать - не сработало. только если каждый тупл завернуть в другой тупл
источник

CO

Chern Oleksander in Moscow Spark
это данные с googlesheet получаемые через их апи
я вижу физически должно быть 3 кортежа
Но... как видим

я думаю вот так сделать та и все
for ele in my_data:
   if len(ele)!=3:
       new_list.append([ele[0],'',''])
   else:
       new_list.append(ele)
Там всеравно данных будет максимум 10 тысяч
источник

k

kvadratura in Moscow Spark
> 10 тысяч
циклами пройтись - норм тогда
источник

k

kvadratura in Moscow Spark
либо перейти на скалу готическую, вдруг жавовский апи для googlesheet чище работает
источник

CO

Chern Oleksander in Moscow Spark
смотрели на R и на JS

одно и тоже (
источник

CO

Chern Oleksander in Moscow Spark
сейчас меньше 1000
источник
2021 December 11

I

Ivan in Moscow Spark
Добрый вечер, подскажите пожалуйста. Делаю structured spark (version 3.2) streaming  в пайплане есть модель машинного обучения из spark ML, данные получаю из kafka и пишу результат в parquet file, хочу замерить processing time и event time, с последним проблем нет так как приходящий стрим имеет это json с timestamp. С первым есть проблемы, пробовал получать timestamp из kafka, но на сколько я понял это время прихода сообщения в кафку а не загрузка сообщения в спарк. Для этого в самом начале процессинга, добавляю .withColumn("timestampSpark", current_timestamp()) и в конце делаю ещё один current_timestamp() и получаю разницу, НО эта разница - 0 и я не могу понять почему (возможно из-за оптимизатора???). Видел что есть listener в которых есть информация, но для structured streaming я не смог его нормально подключить. Подскажите как лучше получить processing time, спасибо
источник

t

tenKe in Moscow Spark
sq.recentProgress
источник
2021 December 12

I

Ivan in Moscow Spark
Спасибо

Может кому-то поможет: F.current_timestamp всегда возвращает время на начале запроса (смотрите документацию), по этому я использовал свою UDF в которой вызываю java метод для получения текущего времени в конце запроса и получаю разницу с timestamp из kafka. Recent progress хорош для ноутбука, но для фонового пайплайна имхо не очень
источник
2021 December 13

VV

Vladislav Verba in Moscow Spark
Всем привет!
А как в мире спарка принято работать с сторонними зависимостями на кластере? У нас свой standalone кластерок, данные лежат в deltalake таблицах. Но много внутренних заказчиков и все они хотят мап-редусить свои кастомные с++ алгоритмы к этим данным, и там под капотом могут быть совершенно любые зависимости - кодеки, opencv, какие-то самописные либы. И мы боимся ставить все это на кластер, т.к слишком сложно поддерживать, обновлять, непонятно что делать если возникнут конфликты версий

Как обычно решают такие проблемы?

В идеале бы уметь средствами спарка мапить целые докер-контейнеры на датафреймы, чтобы не нужно было перекачивать данные с hdfs в сторонние оркестраторы. Но, кажется, это я раскатал губу 😆
источник

SI

Sergey Ivanychev in Moscow Spark
Спарк на кубере решает эту проблему — при запуске драйвера можно указать docker-образ, который надо использовать на драйвере и экзекьютерах
источник