Hive parquet: проверка данных / некорректная обработка данных с использованием spark Dataframe Scala - PullRequest
0 голосов
/ 07 апреля 2019

Я новичок в Скале и Спарк.Я ищу решение о том, как решить неправильные данные из источника.

У меня есть внешняя таблица Hive, сохраненная как serquet serde из исходной системы.Допустим, сотрудник, ниже приведено определение таблицы.

CREATE EXTERNAL TABLE `employee`(
`id` decimal(11,0), 
`first_name` string,
`last_name` timestamp,
`dob` timestamp,
`ssn` string
`created_timestamp` timestamp
)
STORED AS PARQUET
LOCATION
  'hdfs:///user/employee'
TBLPROPERTIES (
  'EXTERNAL'='true');

В моем приложении Spark, используя SQL, я создаю Dataframe, как показано ниже

val df = sparkSession.sqlContext.sql("select * from employee")

После преобразования преобразования в другую таблицу этапов Hive, как показано ниже

val transformedDF = df.select("id","dob","ssn").withColumn("full_name", concat(col("first_name"),col("last_name")))

transformedDF.write.format("parquet").mode("overwrite").save("//newLocation")

При вводе данных из исходного куста, каков наилучший способ проверки и обработки неверных записей?

Например, если поле dob в исходных данных содержит недопустимый формат даты (например, XXX9-01-08)и данные ssn содержат подобные (XXX-89-7854).Как справиться с плохой записью на уровне строк?Сохраняет запись по заданному пути в паркете после преобразования.

Но когда я запрашиваю стадию куста, я получаю сообщение об ошибке:

"Failed with exception java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.hive.serde2.io.TimestampWritableV2"

Если есть исключение из-за плохой записи, есть ли способ сохранить эти записи в отдельном пути, используяdataframewriter, так что моя таблица улья не будет бросать выше исключения?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...