如果我使用 df.write.partitionby(col1).parquet(path) .数据将删除数据上的分区列。如何避免?
df.write.partitionby(col1).parquet(path)
jgovgodb1#
你可以复制 col1 写作前:
col1
df.withColumn("partition_col", col("col1")).write.partitionBy("partition_col").parquet(path)
请注意,这一步其实不是必需的,因为每当您读取分区目录结构中的Parquet文件时,spark都会自动将其作为新列添加到dataframe中。
uujelgoq2#
实际上spark并不删除该列,但它使用该列来组织文件,这样当您读取文件时,它会将该列添加为一列,并以表格格式显示给您。如果您检查表的模式或Dataframe的模式,您仍会将其视为表中的一列。另外,您正在对数据进行分区,以便了解如何频繁地查询表中的数据,并且基于这些信息,您可能已经决定对数据进行分区,以便您的读取变得更快、更高效。
2条答案
按热度按时间jgovgodb1#
你可以复制
col1
写作前:请注意,这一步其实不是必需的,因为每当您读取分区目录结构中的Parquet文件时,spark都会自动将其作为新列添加到dataframe中。
uujelgoq2#
实际上spark并不删除该列,但它使用该列来组织文件,这样当您读取文件时,它会将该列添加为一列,并以表格格式显示给您。如果您检查表的模式或Dataframe的模式,您仍会将其视为表中的一列。
另外,您正在对数据进行分区,以便了解如何频繁地查询表中的数据,并且基于这些信息,您可能已经决定对数据进行分区,以便您的读取变得更快、更高效。