2017-03-11 13 views
1

MultiIndex Pandas DataFrameを使用しているため、インデックスを失うことなくSpark DataFrameに変換できます。これは、おもちゃの例を使用して簡単にテストすることができます:MultiIndex Pandas DataFrameでDataFrameとMissing Indexesが発生する

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], 
      ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] 
tuples = list(zip(*arrays)) 
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) 
df = pd.DataFrame(np.random.randn(8, 4), index=arrays) 
df_spark = sqlContext.createDataFrame(df) 

すべてのインデックスを紛失します。インデックスを維持するために何か必要なことはありますか?

答えて

2

スパークSQLは、インデックスの概念がないので、あなたはそれを保存したい場合は、最初の列にそれをリセットするか、割り当てる必要があり:

df_spark = sqlContext.createDataFrame(df.reset_index(drop=False)) 

これは、それぞれの追加の列をDataFrameを作成します。インデックス内のフィールド:

df_spark.printSchema() 
root 
|-- level_0: string (nullable = true) 
|-- level_1: string (nullable = true) 
|-- 0: double (nullable = true) 
|-- 1: double (nullable = true) 
|-- 2: double (nullable = true) 
|-- 3: double (nullable = true) 

あなたはまた、追加のメモリオーバーヘッドを回避するためにinplaceを使用することができます。

df.reset_index(drop=False, inplace=True) 
df_spark = sqlContext.createDataFrame(df) 
関連する問題