我正在使用最新版本的Spark(2.1.1)。我通过spark.read.csv读取了多个csv文件到dataframe。 使用此数据框处理后,如何将其保存到输出具有特定名称的csv文件。
例如,有100个输入文件(in1.csv,in2.csv,in3.csv,... in100.csv)。 属于in1.csv的行应保存为in1-result.csv。属于in2.csv的行应保存为in2-result.csv,依此类推。(默认文件名将类似于part-xxxx-xxxxx,不可读)
我见过partitionBy(col),但看起来它只能按列分区。
另一个问题是我想绘制我的数据帧。 Spark没有内置的绘图库。很多人使用df.toPandas()转换为pandas并绘制它。有没有更好的解决方案?由于我的数据非常大,toPandas()会导致内存错误。我正在服务器上工作,并希望将绘图保存为图像而不是显示。
答案 0 :(得分:1)
我建议在以下解决方案中将DataFrame写入与输入文件相关的特定目录中:
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)