2017-08-11 14 views
1

データフレームからパーケット作成の関数を作成するにはどうすればいいですか?データフレームからパーケット作成のための関数を作成

ファイルの作成を寄木細工するデータフレームのための構文のようなものである - (pyspark)

df.write.mode( '上書き')寄木細工( "file_name.parquet")

関数を作成するには。このために、私はこのようにしようとしています:

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' 
012で失敗します

私は空のデータフレームを上記に初期化しました。これを達成するためのクリーンな方法はありますか?

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

オブジェクト自体ではなく、データフレームの名前を渡しているようですね – bendl

+0

そうです、私は寄木細工を作成したいときはいつも、データフレームの名前を渡して上記の関数を使用したい – Viv

+0

既にデータフレーム存在するか、後で作成するか?空のページ区切りファイルを作成する必要はありません。既にデータフレームがいっぱいであれば、データフレームオブジェクト自体を渡すだけの理由はありません – bendl

答えて

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_mapparquet_createの範囲に定義されていることを確認する必要があります。

私はevalを使用していると考えることができる唯一の他のオプション:あなたはまた、DFが、同様にこのソリューションのparquet_createの範囲にあることを確認する必要があります

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") 

注意。

これらはどちらも私の心の中では本当に醜い解決策です。正に、データフレームオブジェクト自体を渡すだけの理由は考えられませんが、そこに行くことになります。

関連する問題