pyspark:read partitioned parquet“my\u file.parquet/col1=now”字符串值替换为< current\u time>on read()

px9o7tmv  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(246)

使用wsl debian 10上的pyspark 3.1.1
读取用包含字符串的列分区的Parquet地板文件时 NOW ,字符串将替换为 read() 函数被执行。我想是的 NOW 字符串解释为 now() ```

step to reproduce

df = spark.createDataFrame(data=[("NOW",1), ("TEST", 2)], schema = ["col1", "id"])
df.write.partitionBy("col1").parquet("test/test.parquet")

/home/test/test.parquet/col1=NOW

df_loaded = spark.read.option(
"basePath",
"test/test.parquet",
).parquet("test/test.parquet/col1=*")
df_loaded.show(truncate=False)

+---+--------------------------+
|id |col1 |
+---+--------------------------+
|2 |TEST |
|1 |2021-04-18 14:36:46.532273|
+---+--------------------------+

这是一个bug还是pyspark的正常功能?如果是后者,是否存在 `sparkContext` 避免这种行为的选择?
7ajki6be

7ajki6be1#

我怀疑这是一个预期的功能。。。但我不确定是在哪里记录的。无论如何,如果要将列保留为字符串列,可以在读取Parquet文件时提供架构:

df = spark.read.schema("id long, col1 string").parquet("test/test.parquet")

df.show()
+---+----+
| id|col1|
+---+----+
|  1| NOW|
|  2|TEST|
+---+----+

相关问题