问题
我有一个pyspark作业文件,其中从镶木地板文件中读取了某些数据帧,并应用了一些过滤后的数据帧。这些操作很常见,我希望只执行一次。但是我不知道如何在函数中传递巨大的数据帧或将其正确存储为全局变量。
我尝试过的事情:
我有三个选择。不确定它们是否有效
gives reference errors
)。Persist/Cache
数据框,直到执行这些步骤代码:
def function1():
df_in_concern = sqlContext.read.parquet(...)
df_in_concern = df_in_concern.filter(...)
df_in_concern = df_in_concern.filter(...)
def function2():
df_in_concern = sqlContext.read.parquet(...)
df_in_concern = df_in_concern.filter(...)
df_in_concern = df_in_concern.filter(...)
def main():
function1()
function2()
if __name__ == "__main__":
main()
因此,如果有某种方法可以共同访问df_in_concern
,它将避免繁重的联接并在不同的函数中反复读取
答案 0 :(得分:1)
spark_dataframe.createOrReplaceTempView("tmp_table_name")
可能是您最好的选择,请按以下方式使用:
def read_table_first_time():
df1 = spark.createDataFrame([("val",)],["key"])
df1.createOrReplaceTempView("df1")
def read_table_again():
df_ref = spark.table("df1")
df_ref.show()
read_table_first_time()
read_table_again()
此输出
+---+
|key|
+---+
|val|
+---+