Size: a a a

2019 July 16

AZ

Anton Zadorozhniy in Data Engineers
Edouard Ispravnikov
Привет.

Читаю коллекцию из mongodb, столкнулся со следующим случаем

com.mongodb.spark.exceptions.MongoTypeConversionException:

Cannot cast DATE_TIME into a StructType(StructField($date,StringType,true)) (value: BsonDateTime{value=1516911000777})

Схема выглядит вот так

     .add("_id", StringType)
//      .add("created", (new StructType)
//        .add("$date", StringType))
     .add("modified", (new StructType)
       .add("""$date""", StringType))

В базе так:

       "_id": "1000025",
 "created": {
   "$date": "2018-01-14T23:52:36.329Z"
 },
 "modified": {
   "$date": "2018-01-19T04:00:35.603Z"
 },


Как принять этот тип?
Спасибо.
читать string а потом явно кастить функцией to_date с соответствующим форматом https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-functions-datetime.html#to_date
источник

AZ

Anton Zadorozhniy in Data Engineers
а если не секрет, какой у вас юзкейс? какая цель дергать монгу спарком?
источник

EI

Edouard Ispravnikov in Data Engineers
Anton Zadorozhniy
а если не секрет, какой у вас юзкейс? какая цель дергать монгу спарком?
bi ( + eda ,отчасти )
источник

AZ

Anton Zadorozhniy in Data Engineers
Edouard Ispravnikov
bi ( + eda ,отчасти )
а у вас только джобы, или пользователи тоже работают? как вы разделяете ресурсы между пользователями?
источник

S

Stanislav in Data Engineers
Dumitru Preguza
Мы из Spark (2.1.0) отправляем messages в Kafka, нам надо что бы был delay 10 s каждые 1000 messages, как это сделать ? либо как лучше гуглить ? :)
Спарк обычный или стриминг? Странный кейс
источник

DP

Dumitru Preguza in Data Engineers
обычный сейчас, я тоже подозреваю что он странный, нужен сриминг ? )
источник

DP

Dumitru Preguza in Data Engineers
Stanislav
Спарк обычный или стриминг? Странный кейс
у нас цель в том что бы отправлять данные из Hive в Kafka, spark служит как data processing engine
источник

S

Stanislav in Data Engineers
А откуда вот эти 10 секунд?)
Из хайва стриминг - очень странно) гонять фулсканы ради дифов
источник

N

Nikita Blagodarnyy in Data Engineers
Stanislav
А откуда вот эти 10 секунд?)
Из хайва стриминг - очень странно) гонять фулсканы ради дифов
Там индексы есть :)
источник

S

Stanislav in Data Engineers
В 3 - нет.  Они ж сказали,  что индексы для слабаков
источник

AZ

Anton Zadorozhniy in Data Engineers
индексы для СУБД, хайв не СУБД)
источник

EI

Edouard Ispravnikov in Data Engineers
Anton Zadorozhniy
читать string а потом явно кастить функцией to_date с соответствующим форматом https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-functions-datetime.html#to_date
К-сожалению, так тоже не отдает

org.apache.spark.sql.AnalysisException: cannot resolve 'CAST(test.`modified` AS DATE)' due to data type mismatch: cannot cast struct<$date:string> to date
источник

AZ

Anton Zadorozhniy in Data Engineers
Edouard Ispravnikov
К-сожалению, так тоже не отдает

org.apache.spark.sql.AnalysisException: cannot resolve 'CAST(test.`modified` AS DATE)' due to data type mismatch: cannot cast struct<$date:string> to date
а как строчку он показывает в датафрейме этот атрибут? просто df.show()
источник

GA

Galaydyuk Alexander in Data Engineers
Sergey Kabanov
Доброго времени суток.

Дано: кластер hadoop на базе Cloudera 6, отдельный сервер с бизнес-приложением

Задача: смонтировать HDFS в локальную файловую систему отдельного сервера (AIX) таким образом, чтобы в точке монтирования оказалась нужная поддиректория HDFS. Конечному пользователю необходимы права для записи файлов в HDFS через эту точку монтирования.

Решение: используя инструмент NFS Gateway HDFS монтируется полностью на целевом сервере, создается symlink на нужную поддиректорию, создается user для записи в эту папку как на целевом сервере, так и на серверах кластера. Настраивается user mapping на NFS Gateway. Конечный пользователь использует созданного user и работает с директорией через symlink.

Вопрос: На сколько верно такое решение? Возможно есть более правильные реализации?
Заранее спасибо за комментарии.
Для нас это тоже полезный кейс. Напишите, если будете экспериментировать.
источник

EI

Edouard Ispravnikov in Data Engineers
Anton Zadorozhniy
а как строчку он показывает в датафрейме этот атрибут? просто df.show()
В том-то и дело, что никак.

С самописной схемой где дата заводится как String - отдает ошибку, вот так:

com.mongodb.spark.exceptions.MongoTypeConversionException: Cannot cast DATE_TIME into a StructType(StructField($date,StringType,true)) (value: BsonDateTime{value=1516911000777})


Без схемы, при любом количестве сэпмлов ( пробовал доводить до 500k ), отдает следующую ошибку:

WARN MongoInferSchema: Field 'field' contains conflicting types converting to StringType


Приводил так:

val resDf = spark.sql("select to_date(modified) from test")


и так:

df.withColumn("modified", to_date($modified)).createOrReplaceTempView "test"
источник

AZ

Anton Zadorozhniy in Data Engineers
Edouard Ispravnikov
В том-то и дело, что никак.

С самописной схемой где дата заводится как String - отдает ошибку, вот так:

com.mongodb.spark.exceptions.MongoTypeConversionException: Cannot cast DATE_TIME into a StructType(StructField($date,StringType,true)) (value: BsonDateTime{value=1516911000777})


Без схемы, при любом количестве сэпмлов ( пробовал доводить до 500k ), отдает следующую ошибку:

WARN MongoInferSchema: Field 'field' contains conflicting types converting to StringType


Приводил так:

val resDf = spark.sql("select to_date(modified) from test")


и так:

df.withColumn("modified", to_date($modified)).createOrReplaceTempView "test"
а просто spark.sql("select * from test).show(10) ?
источник

AZ

Anton Zadorozhniy in Data Engineers
df.printSchema() заодно покажите тож
источник

EI

Edouard Ispravnikov in Data Engineers
 |-- modified: struct (nullable = true)
|    |-- $date: timestamp (nullable = true)


Пробовал и long, и string и timestamp и что только не.

В консоли базы findOne() отдает так:

 "modified": {
   "$date": "2018-01-19T04:00:35.603Z"
источник

EI

Edouard Ispravnikov in Data Engineers
Как мне думается, проблема в схеме.

data type mismatch: differing types in '(`modified` / 1000)' (struct<$date:int> and int)
источник

AZ

Anton Zadorozhniy in Data Engineers
да, можно расширить сэмплинг чтобы адаптер другую схему предлагал
источник