df.write.csv

# 将 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 文件夹中的内容可以分为以下几类:

  1. 成功标记文件

    • .SUCCESS:这是一个特殊的文件,用于标记数据写入操作已经成功完成。在分布式文件系统(如 HDFS)中,这个文件的存在表示数据写入操作已经成功完成
    • .SUCCESS.crc:这是一个校验和文件,用于验证 .SUCCESS 文件的完整性。在分布式文件系统中,校验和文件用于确保数据的完整性
  2. 数据文件

    • .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 表示这是第七个数据分片
  3. 校验和文件

    • .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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值