大家好(这里是pyspark初学者), 我的jupyter笔记本中有这样的代码:
# df is a spark dataframe
def mySaveData(pandasDataFrame):
df = spark.createDataFrame(pandasDataFrame)
df.createOrReplaceTempView('data')
df = spark.sql('select id, value from data')
df.write.parquet('mydata.parquet', mode='overwrite')
该功能运行正常。但是,如果我将函数移动到.py文件并将其导入要使用的笔记本中,则该函数不知道变量“ spark”的含义。因此,我测试了不同的方法。我试图将spark作为参数传递,但很长一段时间后它崩溃了。
# df is a spark dataframe
def mySaveData(spark, pandasDataFrame):
我也试图将类似的内容放在.py文件的开头,但没有成功:
import org.apache.spark.SparkContext
sc = SparkContext.getOrCreate()
spark = SparkSession.builder.config(conf=conf).getOrCreate()
唯一有效的方法是在笔记本中添加此行。但是,它只能运行几次,有时会由于过多的RAM使用而中止该过程(我的数据帧只有几个MB,而我公司的基础结构非常大)。
sc.addPyfile('myfile.py')
所以,可能我遇到了一个概念性问题。是否添加.py文件是错误的?我想知道mySaveData()是否同时由所有工作程序执行。有人可以帮助我吗?
PS:通常我不必声明sc和spark变量。已经使用这些确切名称创建了上下文(我不确定如何)。