【发布时间】:2020-03-25 05:03:22
【问题描述】:
有什么方法可以直接将 spark 数据帧写入 xls/xlsx 格式????
网络上的大多数示例都显示了熊猫数据框的示例。
但我想使用 spark 数据框来处理我的数据。有什么想法吗?
【问题讨论】:
-
这里不是原生的 spark 库 - github.com/crealytics/spark-excel 但我建议坚持使用原生格式来利用数据块的性能。
标签: databricks
有什么方法可以直接将 spark 数据帧写入 xls/xlsx 格式????
网络上的大多数示例都显示了熊猫数据框的示例。
但我想使用 spark 数据框来处理我的数据。有什么想法吗?
【问题讨论】:
标签: databricks
我假设因为您有“databricks”标签,所以您希望在 databricks 文件存储中创建一个 .xlsx 文件,并且您正在 databricks 笔记本中运行代码。我还将假设您的笔记本正在运行 python。
没有直接的方法可以从 spark 数据框中保存 excel 文档。但是,您可以将 spark 数据帧转换为 pandas 数据帧,然后从那里导出。我们需要从安装xlsxwriter 包开始。您可以使用databricks utilites 命令为您的笔记本环境执行此操作:
dbutils.library.installPyPI('xlsxwriter')
dbutils.library.restartPython()
我在将 excel 文件直接保存到 dbfs 时遇到了一些权限问题。一个快速的解决方法是保存到集群的默认目录,然后 sudo 将文件移动到 dbfs。下面是一些示例代码:
# Creating dummy spark dataframe
spark_df = spark.sql('SELECT * FROM default.test_delta LIMIT 100')
# Converting spark dataframe to pandas dataframe
pandas_df = spark_df.toPandas()
# Exporting pandas dataframe to xlsx file
pandas_df.to_excel('excel_test.xlsx', engine='xlsxwriter')
然后在一个新命令中,用 %sh 指定要在 shell 中运行的命令:
%sh
sudo mv excel_test.xlsx /dbfs/mnt/data/
【讨论】:
可以从 pySpark 生成 Excel 文件。
df_spark.write.format("com.crealytics.spark.excel")\
.option("header", "true")\
.mode("overwrite")\
.save(path)
您需要安装 com.crealytics:spark-excel_2.12:0.13.5(当然是更新版本)库,例如在 Azure Databricks 中,通过在集群的库列表中将其指定为新的 Maven 库( Databricks UI 的左侧边栏)。
欲了解更多信息,请参阅https://github.com/crealytics/spark-excel。
【讨论】:
我相信你可以这样做。
sourcePropertySet.write
.format("com.databricks.spark.csv")
.option("header", "true")
.save("D:\\resultset.csv")
我不确定您是否可以直接写入 Excel,但 Excel 绝对可以使用 CSV。这几乎可以肯定是做这种事情的最简单的方法,也是最干净的。在 Excel 中,您有各种格式,在某些系统中使用时可能会引发错误(想想合并的单元格)。
【讨论】:
然而 Pyspark 不提供任何保存 excel 文件的方法。但是你可以保存 csv 文件,然后可以在 Excel 中读取。
从 pyspark.sql 模块版本 2.3 你有 write.csv:
df.write.csv('路径/文件名'))
文档:https://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=save
【讨论】: