首页 > 解决方案 > Spark load parquet 无法从分区列推断时间戳

问题描述

我可以保存一个按列分区的镶木地板文件,该列看起来像时间戳,但实际上是一个字符串。当我尝试使用 将该镶木地板加载回 sparkspark.read.load()时,它会自动推断分区列有日期,导致我丢失所有时间信息。有没有办法将分区列作为字符串读回镶木地板文件,或者更好地让它自动解析为给定格式的时间戳?这是一个例子:

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)

这将返回:

+-----+----------+
| col1|   test_dt|
+-----+----------+
|hello|2020-01-01|
+-----+----------+

标签: apache-sparkpysparkpyspark-sqlpyspark-dataframes

解决方案


如果设置spark.sql.sources.partitionColumnTypeInference.enabledfalsebefore read,Spark 将捕获所有尝试推断分区列的数据类型(它们将被视为字符串)。


推荐阅读