Spark:如何将 DataFrame 更改为 LibSVM 并执行逻辑回归
Spark: How change DataFrame to LibSVM and perform logistic regression
我正在使用此代码将数据从 Hive 获取到 Spark:
val hc = new org.apache.spark.sql.hive.HiveContext(sc)
val MyTab = hc.sql("select * from svm_file")
我得到了 DataFrame:
scala> MyTab.show()
+--------------------+
| line|
+--------------------+
|0 2072:1 8594:1 7...|
|0 8609:3 101617:1...|
| 0 7745:2|
|0 6696:2 9568:21 ...|
|0 200076:1 200065...|
|0 400026:20 6936:...|
|0 7793:2 9221:7 1...|
|0 4831:1 400026:1...|
|0 400011:1 400026...|
|0 200072:1 6936:1...|
|0 200065:29 4831:...|
|1 400026:20 3632:...|
|0 400026:19 6936:...|
|0 190004:1 9041:2...|
|0 190005:1 100120...|
|0 400026:21 6936:...|
|0 190004:1 3116:3...|
|0 1590:12 8594:56...|
|0 3632:2 9240:1 4...|
|1 400011:1 400026...|
+--------------------+
only showing top 20 rows
如何将此 DataFrame 转换为 libSVM 以执行逻辑回归,如本例所示:https://altiscale.zendesk.com/hc/en-us/articles/202627136-Spark-Shell-Examples ?
我会说不要首先将它加载到 DataFrame
中,只需使用 MLUtils.loadLibSVMFile
但如果由于某种原因这不是一个选项,您可以转换为 RDD[String]
并使用与 loadLibSVMFile
相同的映射逻辑
import org.apache.spark.sql.Row
import org.apache.spark.mllib.regression.LabeledPoint
MyTab
.map{ case Row(line: String) => line }
.map(_.trim)
.filter(line => !(line.isEmpty || line.startsWith("#")))
.map { line => ??? }
代替???
只需复制并粘贴a relevant part of the loadLibSVMFile
method
sklearn.datasets.dump_svmlight_file
函数有一个名为 zero_based
的参数。默认为 True
。这意味着索引将从 0 开始。Spark 希望它们从 1 开始。因此:使其成为 False
。
我正在使用此代码将数据从 Hive 获取到 Spark:
val hc = new org.apache.spark.sql.hive.HiveContext(sc)
val MyTab = hc.sql("select * from svm_file")
我得到了 DataFrame:
scala> MyTab.show()
+--------------------+
| line|
+--------------------+
|0 2072:1 8594:1 7...|
|0 8609:3 101617:1...|
| 0 7745:2|
|0 6696:2 9568:21 ...|
|0 200076:1 200065...|
|0 400026:20 6936:...|
|0 7793:2 9221:7 1...|
|0 4831:1 400026:1...|
|0 400011:1 400026...|
|0 200072:1 6936:1...|
|0 200065:29 4831:...|
|1 400026:20 3632:...|
|0 400026:19 6936:...|
|0 190004:1 9041:2...|
|0 190005:1 100120...|
|0 400026:21 6936:...|
|0 190004:1 3116:3...|
|0 1590:12 8594:56...|
|0 3632:2 9240:1 4...|
|1 400011:1 400026...|
+--------------------+
only showing top 20 rows
如何将此 DataFrame 转换为 libSVM 以执行逻辑回归,如本例所示:https://altiscale.zendesk.com/hc/en-us/articles/202627136-Spark-Shell-Examples ?
我会说不要首先将它加载到 DataFrame
中,只需使用 MLUtils.loadLibSVMFile
但如果由于某种原因这不是一个选项,您可以转换为 RDD[String]
并使用与 loadLibSVMFile
import org.apache.spark.sql.Row
import org.apache.spark.mllib.regression.LabeledPoint
MyTab
.map{ case Row(line: String) => line }
.map(_.trim)
.filter(line => !(line.isEmpty || line.startsWith("#")))
.map { line => ??? }
代替???
只需复制并粘贴a relevant part of the loadLibSVMFile
method
sklearn.datasets.dump_svmlight_file
函数有一个名为 zero_based
的参数。默认为 True
。这意味着索引将从 0 开始。Spark 希望它们从 1 开始。因此:使其成为 False
。