如何在不同的笔记本中使用“sqlContext”作为模块(Pyspark)

2024-06-26 13:05:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

      Error: global name sqlContext is not defined, 

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

确切代码:

a.pynb(实用工具)

^{pr2}$

在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, 

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


Tags: 文件函数nameimport定义isnot笔记本
1条回答
网友
1楼 · 发布于 2024-06-26 13:05:28

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

基于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

相关问题 更多 >