将多个结果保存到数据框中并将其转换为 pyspark 中的 csv 文件

save multiple outcomes into a dataframe and covert it into csv file in pyspark

我需要创建一个 CSV 输出文件,其中列出数据集中的最低价格、最高价格和总行数。预期输出(CSV 文件)的列名称应为:min_price、max_price 和 total_rows。如何将我的输出合并到数据框中,然后将其保存为包含这三列的 CSV?

到目前为止我已经做了:

df=spark.read.parquet('mydataframe', inferSchema=True)

price=df.select('price')

max=df.agg({'price': 'max'}).show()
min=df.agg({'price': 'min'}).show()
df.count()

似乎是一个简单的聚合,您不应该拆分它,而只是 select 使用单个数据帧操作。

result = (
price
.select(
     F.min('price').alias('minimum_price'),
     F.max('price').alias('maximum_price'), 
     F.count("*").alias("total_of_rows")
    )
)

将结果保存到任何你想要的地方 - 如果你需要它作为单个 csv 文件使用 coalesce(1) (price.coalesce(1).write.csv("your_path", header=True)

在@Benny Elgazar 指出我的解决方案有很多问题后修改了这个答案。基本上,这是他从下面得到的答案,但只是用了一个例子:

df = spark.createDataFrame(
[(1.40,),
(1.43,),
(1.35,),
(1.38,),
(1.39,)]
,['price',])

然后,使用 collect

创建结果数据框
result = (
df
.select(
     F.min('price').alias('minimum_price'),
     F.max('price').alias('maximum_price'), 
     F.count("*").alias("total_of_rows")
    )
)

result.show()

+-------------+-------------+-------------+
|minimum_price|maximum_price|total_of_rows|
+-------------+-------------+-------------+
|         1.35|         1.43|            5|
+-------------+-------------+-------------+

现在,将结果 df 写入 csv 文件:

result.coalesce(1).write.option("header", "true").csv("my_folder/", 'overwrite')

您不能选择 csv 文件的名称。你可以重命名它。检查 以获取一些想法