gpt4 book ai didi

apache-spark - 将数据帧转换为 libsvm 格式

转载 作者:行者123 更新时间:2023-12-04 07:17:13 24 4
gpt4 key购买 nike

我有一个由 sql 查询产生的数据框

df1 = sqlContext.sql("select * from table_test")

我需要将此数据帧转换为 libsvm 格式,以便它可以作为输入提供
pyspark.ml.classification.LogisticRegression

我尝试执行以下操作。但是,这导致了以下错误,因为我使用的是 spark 1.5.2
df1.write.format("libsvm").save("data/foo")
Failed to load class for data source: libsvm

我想改用 MLUtils.loadLibSVMFile 。我在防火墙后面,不能直接 pip 安装它。因此,我下载了该文件,对其进行了 scp 编辑,然后手动安装了它。一切似乎都很好,但我仍然收到以下错误
import org.apache.spark.mllib.util.MLUtils
No module named org.apache.spark.mllib.util.MLUtils

问题 1:我的上述方法是否在正确的方向上将数据帧转换为 libsvm 格式。
问题 2:如果问题 1 为"is",如何让 MLUtils 工作。如果“否”,将数据帧转换为 libsvm 格式的最佳方法是什么

最佳答案

我会这样做(这只是一个带有任意数据框的示例,我不知道您的 df1 是如何完成的,重点是数据转换):

这是我将数据帧转换为 libsvm 格式的方法:

# ... your previous imports

from pyspark.mllib.util import MLUtils
from pyspark.mllib.regression import LabeledPoint

# A DATAFRAME
>>> df.show()
+---+---+---+
| _1| _2| _3|
+---+---+---+
| 1| 3| 6|
| 4| 5| 20|
| 7| 8| 8|
+---+---+---+

# FROM DATAFRAME TO RDD
>>> c = df.rdd # this command will convert your dataframe in a RDD
>>> print (c.take(3))
[Row(_1=1, _2=3, _3=6), Row(_1=4, _2=5, _3=20), Row(_1=7, _2=8, _3=8)]

# FROM RDD OF TUPLE TO A RDD OF LABELEDPOINT
>>> d = c.map(lambda line: LabeledPoint(line[0],[line[1:]])) # arbitrary mapping, it's just an example
>>> print (d.take(3))
[LabeledPoint(1.0, [3.0,6.0]), LabeledPoint(4.0, [5.0,20.0]), LabeledPoint(7.0, [8.0,8.0])]

# SAVE AS LIBSVM
>>> MLUtils.saveAsLibSVMFile(d, "/your/Path/nameFolder/")

您将在“/your/Path/nameFolder/part-0000*”文件上看到的是:

1.0 1:3.0 2:6.0

4.0 1:5.0 2:20.0

7.0 1:8.0 2:8.0

here对于 LabeledPoint 文档

关于apache-spark - 将数据帧转换为 libsvm 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43920111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com