Я новичок в Скале и Спарк.Я ищу решение о том, как решить неправильные данные из источника.
У меня есть внешняя таблица 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, так что моя таблица улья не будет бросать выше исключения?
Спасибо