# 将 DataFrame 写入 CSV 文件
# 拆分 ArrayType 列
df_exploded = df.withColumn("interests", explode("interests"))
print("\nExploded DataFrame:")
df_exploded.show(truncate=False)
# 写入 CSV 文件
df_exploded.write.csv("output_data")
# 从 CSV 文件读取数据并创建 DataFrame
read_df = spark.read.csv("output_data", header=False, inferSchema=True)
print("\nRead DataFrame from CSV:")
read_df.show(truncate=False)
Exploded DataFrame:
+-----+---+------+---------+-----------+----------+-------------------+--------+
|name |age|weight|interests|has_license|birthday |last_checkup |balance |
+-----+---+------+---------+-----------+----------+-------------------+--------+
|Alice|34 |65.5 |reading |true |1990-01-01|2023-01-01 10:00:00|12345.67|
|Alice|34 |65.5 |swimming |true |1990-01-01|2023-01-01 10:00:00|12345.67|
|Bob |45 |80.2 |gaming |false |1979-05-15|2023-05-15 12:00:00|54321.01|
|Bob |45 |80.2 |traveling|false |1979-05-15|2023-05-15 12:00:00|54321.01|
|Cathy|29 |55.0 |cooking |true |1995-08-20|2023-08-20 14:00:00|7890.12 |
|Cathy|29 |55.0 |painting |true |1995-08-20|2023-08-20 14:00:00|7890.12 |
+-----+---+------+---------+-----------+----------+-------------------+--------+
Read DataFrame from CSV:
+-----+---+----+---------+-----+----------+-------------------+--------+
|_c0 |_c1|_c2 |_c3 |_c4 |_c5 |_c6 |_c7 |
+-----+---+----+---------+-----+----------+-------------------+--------+
|Alice|34 |65.5|reading |true |1990-01-01|2023-01-01 10:00:00|12345.67|
|Alice|34 |65.5|swimming |true |1990-01-01|2023-01-01 10:00:00|12345.67|
|Bob |45 |80.2|gaming |false|1979-05-15|2023-05-15 12:00:00|54321.01|
|Bob |45 |80.2|traveling|false|1979-05-15|2023-05-15 12:00:00|54321.01|
|Cathy|29 |55.0|cooking |true |1995-08-20|2023-08-20 14:00:00|7890.12 |
|Cathy|29 |55.0|painting |true |1995-08-20|2023-08-20 14:00:00|7890.12 |
+-----+---+----+---------+-----+----------+-------------------+--------+
output_data是一个文件夹,如下:
根据文件类型,output_data
文件夹中的内容可以分为以下几类:
-
成功标记文件:
.SUCCESS
:这是一个特殊的文件,用于标记数据写入操作已经成功完成。在分布式文件系统(如 HDFS)中,这个文件的存在表示数据写入操作已经成功完成。.SUCCESS.crc
:这是一个校验和文件,用于验证.SUCCESS
文件的完整性。在分布式文件系统中,校验和文件用于确保数据的完整性。
-
数据文件:
.part-00000-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv
:这是一个数据文件,包含了写入的数据。文件名中的.part-00000
表示这是第一个数据分片,后面的数字和字母是随机生成的,用于唯一标识这个数据分片。.part-00002-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv
:这是一个数据文件,包含了写入的数据。文件名中的.part-00002
表示这是第二个数据分片。.part-00005-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv
:这是一个数据文件,包含了写入的数据。文件名中的.part-00005
表示这是第五个数据分片。.part-00007-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv
:这是一个数据文件,包含了写入的数据。文件名中的.part-00007
表示这是第七个数据分片。
-
校验和文件:
.part-00000-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv.crc
:这是一个校验和文件,对应于.part-00000-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv
文件。用于验证数据的完整性。.part-00002-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv.crc
:这是一个校验和文件,对应于.part-00002-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv
文件。.part-00005-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv.crc
:这是一个校验和文件,对应于.part-00005-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv
文件。.part-00007-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv.crc
:这是一个校验和文件,对应于.part-00007-b9d20695-e9a6-4e1e-9012-a4708a9ed543-c000.csv
文件。
这些文件通常是在使用分布式文件系统(如 HDFS)时生成的,用于存储和管理大数据集。每个数据分片(.part-XXXXX.csv
文件)包含了数据的一部分,而对应的校验和文件(.part-XXXXX.csv.crc
文件)用于验证数据的完整性。.SUCCESS
文件和 .SUCCESS.crc
文件则用于标记数据写入操作的完成状态。
第二个分片
Alice,34,65.5,reading,true,1990-01-01,2023-01-01T10:00:00.000+08:00,12345.67
Alice,34,65.5,swimming,true,1990-01-01,2023-01-01T10:00:00.000+08:00,12345.67
第五个分片
Bob,45,80.2,gaming,false,1979-05-15,2023-05-15T12:00:00.000+08:00,54321.01
Bob,45,80.2,traveling,false,1979-05-15,2023-05-15T12:00:00.000+08:00,54321.01
第七个分片
Cathy,29,55.0,cooking,true,1995-08-20,2023-08-20T14:00:00.000+08:00,7890.12
Cathy,29,55.0,painting,true,1995-08-20,2023-08-20T14:00:00.000+08:00,7890.12