Spark load parquet 无法从分区列中推断时间戳
Spark load parquet can't infer timestamp from partitioned column
我可以保存由看起来像时间戳但实际上是字符串的列分区的镶木地板文件。当我尝试使用 spark.read.load()
将该镶木地板加载回 spark 时,它会自动推断分区列有日期,导致我丢失所有时间信息。有没有一种方法可以将分区列作为字符串读回 parquet 文件,或者更好的方法是让它自动解析为给定指定格式的时间戳?这是一个例子:
test_df = spark.createDataFrame(
[
('2020-01-01T00-00-01', 'hello'),
],
[
'test_dt', 'col1'
]
)
test_df.write.save('hdfs:///user/test_write', 'parquet', mode='overwrite', partitionBy='test_dt')
test_read = spark.read.load('hdfs:///user/test_write', 'parquet')
test_read.show(1)
这个returns:
+-----+----------+
| col1| test_dt|
+-----+----------+
|hello|2020-01-01|
+-----+----------+
如果在读取前将spark.sql.sources.partitionColumnTypeInference.enabled
设置为false
,Spark将抓住所有尝试推断分区列数据类型的尝试(它们将被视为字符串)。
我可以保存由看起来像时间戳但实际上是字符串的列分区的镶木地板文件。当我尝试使用 spark.read.load()
将该镶木地板加载回 spark 时,它会自动推断分区列有日期,导致我丢失所有时间信息。有没有一种方法可以将分区列作为字符串读回 parquet 文件,或者更好的方法是让它自动解析为给定指定格式的时间戳?这是一个例子:
test_df = spark.createDataFrame(
[
('2020-01-01T00-00-01', 'hello'),
],
[
'test_dt', 'col1'
]
)
test_df.write.save('hdfs:///user/test_write', 'parquet', mode='overwrite', partitionBy='test_dt')
test_read = spark.read.load('hdfs:///user/test_write', 'parquet')
test_read.show(1)
这个returns:
+-----+----------+
| col1| test_dt|
+-----+----------+
|hello|2020-01-01|
+-----+----------+
如果在读取前将spark.sql.sources.partitionColumnTypeInference.enabled
设置为false
,Spark将抓住所有尝试推断分区列数据类型的尝试(它们将被视为字符串)。