Pyspark:将df写入具有特定名称的文件,plot d

2024-09-24 10:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Spark(2.1.1)的最新版本。我把多个csv文件读到dataframespark.read.csv. 处理完此数据帧后,如何将其保存到具有特定名称的csv输出文件中。在

例如,有100个输入文件(in1.csv,in2.csv,in3.csv,…in100.csv)。 属于in1.csv的行应另存为in1-结果.csv. 属于in2.csv的行应另存为in2-结果.csv以此类推。(默认文件名将类似于part-xxxx-xxxxx,不可读)

我已经看到了partitionBy(col),但看起来它只能按列进行分区。在

另一个问题是我想绘制我的数据帧。Spark没有内置的打印库。很多人使用东方达()转换成熊猫并策划它。有更好的解决办法吗?因为我的数据很大,toPandas()会导致内存错误。我正在服务器上工作,希望将绘图保存为图像而不是显示。在


Tags: 文件csv数据版本名称read文件名spark
1条回答
网友
1楼 · 发布于 2024-09-24 10:26:52

我建议在与输入文件相关的特定目录中写入数据帧的解决方案如下:

  • 每个文件的循环中:
    • 读取csv文件
    • 使用withColumn转换添加包含有关输入文件信息的新列
    • 使用union转换联合所有数据帧
  • 进行必要的预处理
  • 通过向列提供输入文件信息,使用partitionBy保存结果,以便与同一输入文件相关的行将保存在同一输出目录中

代码可能看起来像:

all_df = None
for file in files: # where files is list of input CSV files that you want to read
    df = spark.read.csv(file)
    df.withColumn("input_file", file)
    if all_df is None:
        all_df = df
    else:
        all_df = all_df.union(df)

# do preprocessing

result.write.partitionBy(result.input_file).csv(outdir)

相关问题 更多 >