将多个结果保存到数据框中并将其转换为 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 文件的名称。你可以重命名它。检查 以获取一些想法
我需要创建一个 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 文件的名称。你可以重命名它。检查