@andrew李:
UDF的原因不能被發現,當孩子筆記本結束運行時,火花上下文,用於定義和注冊UDF被摧毀。因此,UDF不再可用的火花所使用的上下文掌握筆記本。
為了解決這個問題,您可以定義和寄存器中的UDF主筆記本,或者你可以將UDF作為一個參數傳遞給主筆記本從子筆記本使用dbutils.notebook.exit()函數。
這裏有一個例子如何通過UDF作為參數從子筆記本到主筆記本:
在孩子的筆記本:
def my_udf (x):返回x + 1 spark.udf。注冊(“my_udf my_udf) dbutils.notebook.exit (my_udf)
在主筆記本:
child_udf = dbutils.notebook.run (“PathToChildnotebook timeout_seconds = 600) spark.udf。注冊(“my_udf child_udf)
在這個例子中,定義my_udf UDF和注冊在孩子的筆記本,然後作為一個參數傳遞給dbutils.notebook.exit()函數。主筆記本dbutils.notebook.run()函數調用子筆記本作為字符串並返回UDF。然後注冊UDF的火花上下文掌握筆記本使用spark.udf.register ()。
@Debayan慕克吉錯誤代碼是:未定義的功能:my_udf_name。這個函數是建成的/臨時函數和持久性函數作為spark_catalog_.default.my_udf_name合格。
我的理解,dbuils.notebook.run觸發一個單獨的工作,定義和注冊一個函數,但工作崗位上執行相同的集群,所以他們在同一個引發會話,注冊udf與火花會話。為什麼masternote不能調用udf中定義孩子筆記本嗎?
如果我使用魔法命令%運行,它將在執行同樣的工作,masternote書沒有問題叫“十一五udf中定義的孩子的筆記本。
@andrew李:
UDF的原因不能被發現,當孩子筆記本結束運行時,火花上下文,用於定義和注冊UDF被摧毀。因此,UDF不再可用的火花所使用的上下文掌握筆記本。
為了解決這個問題,您可以定義和寄存器中的UDF主筆記本,或者你可以將UDF作為一個參數傳遞給主筆記本從子筆記本使用dbutils.notebook.exit()函數。
這裏有一個例子如何通過UDF作為參數從子筆記本到主筆記本:
在孩子的筆記本:
def my_udf (x):返回x + 1 spark.udf。注冊(“my_udf my_udf) dbutils.notebook.exit (my_udf)
在主筆記本:
child_udf = dbutils.notebook.run (“PathToChildnotebook timeout_seconds = 600) spark.udf。注冊(“my_udf child_udf)
在這個例子中,定義my_udf UDF和注冊在孩子的筆記本,然後作為一個參數傳遞給dbutils.notebook.exit()函數。主筆記本dbutils.notebook.run()函數調用子筆記本作為字符串並返回UDF。然後注冊UDF的火花上下文掌握筆記本使用spark.udf.register ()。