如何创建数据框到镶木地板创建的功能?
数据框到镶木地板文件创建的语法类似于 - (pyspark)
df.write.mode('覆盖&#39)镶木地板(" file_name.parquet&#34)。
要为此创建一个函数,我正在尝试这样:
def parquet_create(df_name,file_name):
df_name.write.mode('overwrite').parquet(file_name+".parquet")
return
但是当我使用parquet_create(" abc"," eee")时... ...它失败了
AttributeError: 'str' object has no attribute 'write'
所以,我将一个空的数据框初始化为上述,有没有更清晰的方法来实现相同的目标?
def parquet_create(df_name,file_name):
df_name = sqlContext.read.json("my_empty_file.parquet")
df_name = df_name.write.mode('overwrite').parquet(file_name+".parquet")
return
如果数据框初始化了函数怎么办?
答案 0 :(得分:1)
您现在的代码是尝试从名为df_name
的数据框创建一个镶木地板文件,该数据框作为参数传递。它接收的是一个字符串而不是数据帧,所以它失败了。这里理想的情况是,不是传入数据帧的字符串名称,而是传入对象,如下所示:
df = ... # define a dataframe
filename = ... # some filename
parquet_create(df, filename)
听起来,由于某些原因,这不是你的选择,因此有几种解决方法。您可以创建一个将字符串数据框名称与数据框对象相关联的字典,如下所示:
df = ... # define a dataframe
df2 = ... # define another dataframe
filename = ... # some filename
name_map = {'df': df, 'df2': df2}
parquet_create('df', filename)
并像这样定义parquet_create
:
def parquet_create(df_name, file_name):
name_map[df_name].write.mode('overwrite').parquet(file_name+".parquet")
您必须确保在name_map
范围内定义parquet_create
。
我能想到的唯一其他选择是使用eval
:
df = ... # define a dataframe
filename = ... # some filename
parquet_create(df, filename)
def parquet_create(df_name, file_name):
eval(df_name).write.mode('overwrite').parquet(file_name+".parquet")
请注意,您还必须确保此解决方案的df在parquet_create范围内。
在我看来,这些都是非常难看的解决方案,老实说,我不能想到不仅仅传递数据框对象本身的理由,而是你去了。