pyspark python数据帧在不同功能中的重用

时间:2019-04-26 15:21:35

标签: python apache-spark pyspark

问题

我有一个pyspark作业文件,其中从镶木地板文件中读取了某些数据帧,并应用了一些过滤后的数据帧。这些操作很常见,我希望只执行一次。但是我不知道如何在函数中传递巨大的数据帧或将其正确存储为全局变量。

我尝试过的事情

我有三个选择。不确定它们是否有效

  1. 将此数据框传递给每个函数
  2. 将此数据框在main中定义为空,并在其他功能中访问/修改(不确定gives reference errors)。
  3. 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,它将避免繁重的联接并在不同的函数中反复读取

1 个答案:

答案 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|
+---+