转换为libsvm时保留sparkDataframe的顺序

ojsjcaue  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(671)

我们知道sparkDataframe的顺序在保存到存储器时丢失例如,假设我们有一个有3列的sparkDataframe

+--------+-----+---+
|feature |label| id|
+--------+-----+---+
| ...    | ... |...|
+--------+-----+---+

我们可以使用以下方法将Dataframe保存为libsvm:

df.select("label", "feature").write.mode("overwrite").format("libsvm").save(some_path)

但是,在转换到libsvm之后,我们失去了 id 列。
问题:我们怎样才能找到 id 对于libsvm中的数据?

f45qwnt8

f45qwnt81#

你输了 id 列,因为您选择了列的子集。
如果要插入整个Dataframe,请使用:

df.write.mode("overwrite").format("libsvm").save(some_path)

如果您只需要这3列,请使用:

df.select("label", "feature", "id").write.mode("overwrite").format("libsvm").save(some_path)

https://spark.apache.org/docs/latest/api/scala/org/apache/spark/sql/dataset.html#select(cols:org.apache.spark.sql.column*):org.apache.spark.sql.dataframe

相关问题