【问题标题】:databricks: writing spark dataframe directly to exceldatabricks:将 spark 数据框直接写入 excel
【发布时间】:2020-03-25 05:03:22
【问题描述】:

有什么方法可以直接将 spark 数据帧写入 xls/xlsx 格式????

网络上的大多数示例都显示了熊猫数据框的示例。

但我想使用 spark 数据框来处理我的数据。有什么想法吗?

【问题讨论】:

标签: databricks


【解决方案1】:

我假设因为您有“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/

【讨论】:

  • 请记住,您的数据帧必须适合驱动程序的内存,否则这种方法会使您的程序崩溃。
【解决方案2】:

可以从 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

【讨论】:

    【解决方案3】:

    我相信你可以这样做。

    sourcePropertySet.write
        .format("com.databricks.spark.csv")
        .option("header", "true")
        .save("D:\\resultset.csv")
    

    我不确定您是否可以直接写入 Excel,但 Excel 绝对可以使用 CSV。这几乎可以肯定是做这种事情的最简单的方法,也是最干净的。在 Excel 中,您有各种格式,在某些系统中使用时可能会引发错误(想想合并的单元格)。

    【讨论】:

    • xlsxwriter 可以与 SPARK DATAFRAME 一起使用而不是 panda ?
    【解决方案4】:

    然而 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 2019-11-04
      • 2020-02-05
      • 2020-04-12
      • 1970-01-01
      • 2018-04-15
      相关资源
      最近更新 更多