在 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()
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()