pyspark-python数据帧在不同函数中的重用

2024-04-19 23:53:20 发布

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

问题

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

我试过的

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

  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,它将避免重连接和在不同函数中反复读取


Tags: 文件数据函数indfreadmaindef
1条回答
网友
1楼 · 发布于 2024-04-19 23:53:20

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

相关问题 更多 >