Запись раздела с столбцом Date Java-Spark

97
8

Я использую Java-Spark.

Я пытаюсь написать столбец столбцов таблицы Hive table, то, что я пытаюсь сделать:

Dataset<Row> ds = dataframe.select(cols).withColumn("load_date", function.lit("08.07.2018").cast("date"));
ds.write().mode(mode).partitionBy("load_date").save(hdfsDirectory);

После того, как я запускаю строки ниже, я вижу в hdfs следующий каталог:

/load_date=__HIVE_DEFAULT_PARTITION__

Это значение по нулевому значению.

Итак, как я могу написать раздел по дате?

Благодарю.

спросил(а) 2021-01-19T18:04:17+03:00 2 месяца, 3 недели назад
1
Решение
62

Более простой способ - использовать следующую функцию

from_unixtime(unix_timestamp('2016/06/01','yyyy/MM/dd'),'yyyyMMdd')

Я предпочитаю использовать искру sql для достижения этого

ds.createOrUpdateTempTable("tempTable")
val dsWithLoadDate = spark.sql("select *, from_unixtime(unix_timestamp('2016/06/01','yyyy/MM/dd'),'yyyyMMdd') as load_date from tempTable")

dsWithLoadDate.write().mode(mode).partitionBy("load_date").save(hdfsDirectory);

ответил(а) 2021-01-19T18:04:17+03:00 2 месяца, 3 недели назад
61

Для того, чтобы использовать cast дату должен быть в стандартной форме (год-месяц-день)

Dataset<Row> ds = dataframe.select(cols).withColumn("load_date", function.lit("2018-07-08").cast("date"));

В противном случае используйте функцию oassql.functions.to_date и предоставите формат, совместимый с SimpleDateFormat

ответил(а) 2021-01-19T18:04:17+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема