PySpark 数据帧与标题不匹配

问题描述 投票:0回答:1

我有一堆在 6 个月内编写的 parquet 文件,按创建日期和时间进行分区。在这 6 个月中,标头发生了更改,因此 1 月 1 日创建的 parquet 文件的数据架构与 5 月 1 日创建的文件不同。

我正在尝试将 1 月 1 日使用 PySpark 创建的 parquet 文件读取到数据帧中(每小时),然后将它们写回到具有更大块大小的另一个文件夹中的 parquet 文件中。问题是,当我将新创建的 parquet 文件的标头与原始 parquet 文件的标头进行比较时,它们是不同的。

这是我所拥有的:

# Code to read into dataframes and write to parquet files
df = spark.read.parquet("original_folder/")
df.createOrReplaceTempView("all_records")
df1 = spark.sql("select * from all_records where datestr='20240101' and hourstr = '0'")
df1.coalesce(80).write.mode("append").partitionBy("datestr","hourstr").option("parquet.block.size", 134217728).parquet("new_folder/")

# Code to read from original parquet file
df_orig = spark.read.parquet("original_folder/datestr=20240101/hourstr=0/")

df1
df_orig
中的标题是不同的,即使对于精确的记录也是如此。为什么会这样?如何从镶木地板文件中提取具有正确架构的实际数据?

python dataframe pyspark parquet
1个回答
0
投票

df/df1
中,您正在从父目录中读取。这意味着子文件夹名称(已分区)将作为列添加到 DataFrame 中。

因此,

=
字符之前的子文件夹名称将用作列名称。在此示例中,
datestr
hourstr
将作为列添加到 DataFrame 中。

df_orig
中,您仅读取子文件夹目录中的一个分区。因此
datestr
hourstr
的结果列不会添加到 DataFrame 中。

© www.soinside.com 2019 - 2024. All rights reserved.