转换为libsvm时保留Spark Dataframe的顺序

问题描述

我们知道保存到存储器时,Spark Dataframe订单的顺序丢失了 例如,假设我们有一个3列的Spark数据框

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

我们可以使用以下方法将数据框另存为libsvm:

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

但是,转换为libsvm后,我们丢失了id列。

问题:如何在libsvm中找到数据的id

解决方法

您丢失了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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...