使用另一个文件中的函数保存Spark数据框

时间:2018-12-11 20:39:41

标签: python-2.7 dataframe pyspark parquet

大家好(这里是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变量。已经使用这些确切名称创建了上下文(我不确定如何)。

0 个答案:

没有答案