将pandas数据框转换为PySpark数据框会丢失索引。

4
我有一个名为data_clean的pandas数据框,它长这样: enter image description here 我想将其转换为Spark数据框,因此我使用createDataFrame()方法: sparkDF = spark.createDataFrame(data_clean) 但是,这似乎会从原始数据框中删除索引列(即具有名称ali、anthony、bill等的列)。输出为:
sparkDF.printSchema()
sparkDF.show()

"是"
root
 |-- transcript: string (nullable = true)

+--------------------+
|          transcript|
+--------------------+
|ladies and gentle...|
|thank you thank y...|
| all right thank ...|
|                    |
|this is dave he t...|
|                    |
|   ladies and gen...|
|   ladies and gen...|
|armed with boyish...|
|introfade the mus...|
|wow hey thank you...|
|hello hello how y...|
+--------------------+

文档中说createDataFrame()可以接受pandas.DataFrame作为输入。我正在使用的Spark版本是'3.0.1'。
其他关于此问题的stackoverflow上的问题没有提到索引列消失的问题: 我可能忽略了一些显而易见的东西,但是当我从pandas dataframe转换为PySpark dataframe时,如何保留索引列?
2个回答

4

Spark DataFrame没有索引的概念,所以如果想保留索引,就必须首先使用pandas dataframe中的reset_index将其分配给一列。

您还可以使用inplace来避免在重置索引时产生额外的内存开销。

df.reset_index(drop=False,inplace=True)

sparkDF = sqlContext.createDataFrame(df)

1
AdibP和Vaebhav的答案都有效。我选择了后者,因为他解释了“Spark DataFrame没有索引的概念”,这让我非常清楚。两种方法都行,我喜欢AdibP回答中简洁的特点和rename_axis()功能。 - Yann Stoneman

4
使用Pandas dataframe的reset_index方法转换为Spark dataframe。你还可以使用rename_axis来命名它。
sparkDF = spark.createDataFrame(data_clean.rename_axis('name').reset_index())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接