pyspark:读取分区镶木地板 "my_file.parquet/col1=NOW" 字符串值替换为 <current_time> on read()

pyspark: read partitioned parquet "my_file.parquet/col1=NOW" string value replaced by <current_time> on read()

在 wsl Debian 10 上使用 pyspark 3.1.1

当读取使用包含字符串 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|
+---+--------------------------+

这是 pyspark 的错误还是正常功能? 如果是后者,是否有 sparkContext 选项来避免这种行为?

我怀疑这是一个预期的功能...但我不确定它记录在何处。无论如何,如果您想将该列保留为字符串列,您可以在读取 parquet 文件时提供一个模式:

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

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