MultiIndex Pandas DataFrame到Spark DataFrame&缺失索引

时间:2017-03-11 18:07:12

标签: pandas apache-spark pyspark apache-spark-sql multi-index

拥有MultiIndex Pandas DataFrame,如何在不丢失索引的情况下将其转换为Spark DataFrame。这可以使用玩具示例轻松测试:

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)

错过了所有索引。为了保存索引,我还需要注意什么吗?

1 个答案:

答案 0 :(得分:5)

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