apache-spark - 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|
+-----+----------+
解决方案
如果设置spark.sql.sources.partitionColumnTypeInference.enabled
为false
before read,Spark 将捕获所有尝试推断分区列的数据类型(它们将被视为字符串)。
推荐阅读
- haskell - Haskell 错误:变量不在范围内:myEven
- ios - 在 Swift 中动态改变 SCNView 的背景
- apache-nifi - 使用 Nifi 计算目录中的文件数
- java - 如何修复 Cloud Bigtable Hello World 示例?
- reactjs - TODO 项目没有正常工作
- ios - 对 Delphi 的 Objective-c 完成处理程序
- python - Kivy倒计时应用程序
- javascript - 如何在 jQuery 中使用 HTML 模板标签?
- jquery - 如何使插入的项目可排序
- python - 为嵌套列表的每个元素添加前缀和后缀