在 2 个函数之间传递数据帧 python

Passing dataframe between 2 functions python

from varname import nameof
from pyspark.sql import SparkSession

cwd = os.getcwd()

def output_to_csv(df):
    df.coalesce(1).write.option("header", "true")\
        .mode('overwrite')\
            .csv(cwd + '/output_files/' + nameof(df))
    return None


def main():
      spark = SparkSession.builder.appName('test').getOrCreate()
      ## other functions here ##
      output_to_csv(dataframe_abc)
      spark.stop()

所以我想做的是从函数 (pyspark) output_to_csv() 中动态命名输出 csv 文件。我想要的输出是 /output_files/dataframe_abc。该函数工作正常,因为它从 dataframe_abc 输出正确的数据。但是,包含来自 spark 输出的 csv 文件的文件夹的输出名称是“df”——来自原始函数。我是 Python 的新手,也是 PySpark 的新手。谁能帮我介绍一下?

问题是,当您在 output_to_csv 中调用 nameof 时,变量名称实际上是 'df',因为它是函数的局部变量,没有意义传入的变量名。

我的建议是将对 nameof 的调用移动到您的 main 函数中,然后将其作为参数传递给 output_to_csv 函数:

from varname import nameof
from pyspark.sql import SparkSession

cwd = os.getcwd()

def output_to_csv(df, fname):
    df.coalesce(1).write.option("header", "true")\
        .mode('overwrite')\
            .csv(cwd + '/output_files/' + fname)
    return None


def main():
      spark = SparkSession.builder.appName('test').getOrCreate()
      ## other functions here ##
      output_to_csv(dataframe_abc, nameof(dataframe_abc))
      spark.stop()