创建数据框到镶木地板创建的功能

时间:2017-08-11 14:42:20

标签: python function dataframe pyspark

如何创建数据框到镶木地板创建的功能?

数据框到镶木地板文件创建的语法类似于 - (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

如果数据框初始化了函数怎么办?

1 个答案:

答案 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范围内。

在我看来,这些都是非常难看的解决方案,老实说,我不能想到不仅仅传递数据框对象本身的理由,而是你去了。