gpt4 book ai didi

python - 将其中一个笔记本用作模块时如何在不同笔记本中使用 "sqlContext"(Pyspark)

转载 作者:行者123 更新时间:2023-11-28 17:13:36 25 4
gpt4 key购买 nike

我有一个笔记本 a.pynb,它具有读取 parquet 文件语句的功能。

我在另一个笔记本 b.pynb 中使用 a.pynb,在这个新笔记本中,我调用 a.pynb 的一个函数来读取这个 parquet 文件并创建一个 sqltable。但它总是失败

      Error: global name sqlContext is not defined, 

当它在两个笔记本中都有定义时。

具体代码:

a.pynb(实用程序)

   sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)

def parquet_read(file_name):
df = sqlContext.read.parquet(file_name+"*.parquet")
return df

在b.pynb中我用到了这个函数

    import nbimporter
import a as commonUtils
reload(commonUtils)
sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)

df2 = commonUtils.parquet_read("abc")

总是失败

    Error: global name sqlContext is not defined, 

当它在两个笔记本中都有定义时。

最佳答案

我会非常犹豫地使用您正在遵循的方法(即将笔记本作为模块导入)。我认为您最好将实用程序代码移动到 .py 文件,而不是尝试使用魔术将笔记本作为模块导入。

基于documentation ,看来您忽略了一些魔法:

here we only run code which either defines a function or a class

从您的代码示例看来,您将 sqlContext 定义为模块级变量,而不是类或函数。

一种方法是按如下方式重新组织您的代码。我认为更好的方法是将此代码移动到 .py 文件中。

def parquet_read(file_name):
sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)
df = sqlContext.read.parquet(file_name+"*.parquet")
return df

关于python - 将其中一个笔记本用作模块时如何在不同笔记本中使用 "sqlContext"(Pyspark),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45677180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com