【问题标题】:How to pass a dataframe as notebook parameter in databricks?如何在数据块中将数据框作为笔记本参数传递?
【发布时间】:2021-08-30 14:29:30
【问题描述】:

我有一个要求,我需要将 pyspark 数据帧作为笔记本参数传递给子笔记本。本质上,子笔记本几乎没有参数类型为数据框的函数来执行某些任务。现在的问题是我无法使用 (不将其写入临时目录)

dbutils.notebook.run(<notebookpath>, timeout, <arguments>)

我尝试引用此网址 - Return a dataframe from another notebook in databricks

但是,我仍然有点困惑,如何将数据帧从子笔记本返回到父笔记本,以及从父笔记本返回到另一个子笔记本。

我尝试编写如下代码 -

tempview_list = ["tempView1", "tempView2", "tempView3"]
 
for tempview in tempview_list:
  dbutils.notebook.exit(spark.sql(f"Select * from {tempview}"))

但它只是返回第一个 tempView 的架构。

请帮忙。我是 pyspark 的新手。

谢谢。

【问题讨论】:

    标签: pyspark databricks azure-databricks spark-notebook azure-notebooks


    【解决方案1】:

    您不能直接将数据框作为参数传递或退出数据框。 这种方式只能传递字符串。 -- 你最终做的是退出你的视图模式。

    您想要执行此操作的方式是将要在笔记本之间传递的 DataFrame 写入 global_temp_view。

    完成后,您可以将 temp_view 的名称/位置作为参数传递或将其退出给父级。

    这在这里解释得最好(使用示例 1: https://docs.databricks.com/notebooks/notebook-workflows.html#pass-structured-data

    但是,由于这仅提供退出一个数据帧/temp_view 的指导,我将详细说明您提供的示例。

    主要变化有:

    • 您退出的是视图名称而不是数据本身。
    • 您只能退出一件事,因此将所有名称作为一个退出。
    • For 循环位于父级中,使用名称从临时视图中读取。

    在父级中运行子笔记本并将其输出/退出分配给一个变量:

    child_output = dbutils.notebook.run(<notebookpath>, timeout, <arguments>)
    

    在孩子中:

    tempview_list = ["tempView1", "tempView2", "tempView3"]
    dbutils.notebook.exit(tempview_list)
    

    数组将作为字符串退出到child_output变量中:

    "['tempView1', 'tempView2', 'tempView3']"
    

    因此,在父级中,您需要使用 exec() 将字符串转回数组:

    exec(f'tempview_list = {child_output}')
    

    现在您已完成此操作,您可以在父笔记本中执行 for 循环:

    global_temp_db = spark.conf.get("spark.sql.globalTempDatabase")
    
    for tempview in tempview_list:
      exec(f'{tempview}_df = table(global_temp_db + "." + tempview)')
    

    这将根据您的 temp_views 创建 3 个数据帧:tempView1_df、tempView2_df 和 tempView3_df,您可以随心所欲地使用它们。

    我假设您已经从初始数据帧创建了 temp_views,您需要将它们更新为 global_temp_views。

    【讨论】:

    • 谢谢莱斯特。我会试试这个方法
    • @dexter48 运气好吗?
    猜你喜欢
    • 2023-03-28
    • 2021-10-23
    • 1970-01-01
    • 2019-07-23
    • 2020-05-28
    • 2020-12-26
    • 2018-01-11
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多