【问题标题】:How to pass data generated by a Databricks notebook to a Python step?如何将 Databricks 笔记本生成的数据传递给 Python 步骤?
【发布时间】:2019-11-24 05:01:42
【问题描述】:

我正在构建一个 Azure 数据工厂 v2,其中包含

  • 从 Azure Blob 存储中查询大型表并生成表格结果 intermediate_table 的 Databricks 步骤;
  • 读取 processed_table 并生成最终输出的 Python 步骤(它会执行多项操作,而且放在单个笔记本中会很麻烦)。

看起来像这样

笔记本生成了一个pyspark.sql.dataframe.DataFrame,我尝试将其保存为镶木地板格式

processed_table.write.format("parquet").saveAsTable("intermediate_table", mode='overwrite')

processed_table.write.parquet("intermediate_table", mode='overwrite')

现在,我希望 Python 步骤重新读取中间结果,最好使用 postprocess.py 文件,其语法类似于

import pandas as pd
intermediate = pd.read_parquet("intermediate_table")

在我的 Databricks 集群中安装 fastparquet 之后。
这(不足为奇......)失败并出现类似的错误

FileNotFoundError: [Errno 2] 没有这样的文件或目录: './my_processed_table'

我假设未找到该文件,因为 Python 文件未访问正确上下文/路径中的数据。

我应该如何修改上面的代码,以及在管道中的这些步骤之间传递数据的最佳/规范方法是什么? (欢迎任何其他关于常见/最佳做法的建议)

【问题讨论】:

  • 将文件保存到 DBFS 有助于解决这个问题吗?
  • 一切顺利,我是数据工厂和 Databricks 的新手,所以我不确定这里有哪些最佳实践!如果我保存到 dbfs(我认为这是 write.parquet 所做的),我应该如何在 Python 步骤中加载文件? pd.read_parquet("dbfs:/my_processed_table") 也失败了……
  • saveAsTable 可能不适用于 DBFS。不过,我必须自己弄乱它,看看这是否有效。这主要只是一个想法:)

标签: python pyspark azure-data-factory-2 azure-databricks fastparquet


【解决方案1】:

成功运行管道的一种方法是在 Databricks 笔记本中添加类似的单元格

%python

spark.conf.set("spark.sql.execution.arrow.enabled", "true")
import pandas as pd
processed_table.toPandas().to_parquet("/dbfs/intermediate", engine="fastparquet", compression = None)

然后有preprocess.py

import pandas as pd
intermediate = pd.read_parquet("/dbfs/intermediate")

不确定这是否是好的做法(虽然它有效)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-19
    • 2022-11-16
    • 2020-03-04
    • 2014-09-23
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多