2017-07-31 10 views
0

random.intメソッドを使用して2列のpandas dfを作成し、groupby操作を適用する2番目の2列のデータフレームを生成しました。 df.col1は一連のリストであり、df.col2は一連の整数であり、リスト内の要素はタイプ 'numpy.int64'であり、2番目の列の要素はrandom.intの結果と同じです。私は、クレタ島にspark.createDataFrame(DF)とpyspark.sqlのデータフレームをしようとするとNumpy値を持つpandasデータフレームをpysparkSQL.DataFrameに変換する

df.a  df.b 
3   7 
5   2 
1   8 
... 

groupby operations 

df.col1  df.col2 
[1,2,3...] 1 
[2,5,6...] 2 
[6,4,....] 3 
... 

、私はこのエラーを取得する: TypeError例外:サポートされていないタイプ:型 'numpy.int64'。バックDFの世代へ行く

は、私はPythonのintにnumpy.int64から要素を変換するためのさまざまな方法を試してみましたが、テーマのどれも働いた:

np_list = np.random.randint(0,2500, size = (10000,2)).astype(IntegerType) 
df = pd.DataFrame(np_list,columns = list('ab'), dtype = 'int') 

私もラムダのxとマッピングしてみました:int型(x)またはx.item()でも型は 'numpy.int64'のままです。

pyspark.sqlのドキュメントによると、pandasデータフレームを読み込むことは可能ですが、numpy値が付いている場合は互換性がないようです。 ヒント?

ありがとうございます!

答えて

0

あなたのやり方はうまくいかない。このようなものがあれば。最初の列のためにエラーが発生します。 Sparkはタイプnumpy.int64のリストを理解していません

​​3210

このような場合は、これは大丈夫です。あなたのコードの面では

df.a  df.b 
3   7 
5   2 
1   8 

、この試してください:あなたは本当に再びintとしてこれをキャストする必要はありませんし、あなたが明示的にそれをしたい場合は、それはarray.astype(int)ある

np_list = np.random.randint(0,2500, size = (10000,2)) 
df = pd.DataFrame(np_list,columns = list('ab')) 
spark_df = spark.createDataFrame(df) 

を。次に、spark_df.headを実行してください。これはうまくいくはずです!

+0

ありがとう@DatTran、それは動作します。しかし私が変換したいdfは、最初のもの(魔法使いの列co1とcol2とリスト)で、2番目のものではありません。そのため、他のデータフレームで 'numpy.int64'から 'python int'への変換を強制しようとしました。 – csbr

+0

私が言ったように、これは不可能です!それ以外の場合は 'string'としてキャストする必要があります。 –

+0

ここにもう一度@csbr ...これらの回答を受け入れる必要があります。 – eliasah

関連する問題