Pyspark ML错误对象没有属性映射

时间:2017-10-14 13:54:15

标签: hadoop machine-learning pyspark analytics cloudera

以下是我的数据框和代码

df=    
a b  c d    
1 3  10 110    
2 5  12 112    
3 6  17 112    
4  8  110 442

以下是我的代码

spark =SparkSession.builder.appName('dev_member_validate_spark').config('spark.sql.crossJoin.enabled','true').getOrCreate()
sqlCtx=SQLContext(spark)
from pyspark.ml.linalg import DenseVector
from pyspark.mllib.regression import LabeledPoint
temp = df.select("a","b").map(lambda line:LabeledPoint(line[0],[line[1:]]))

当我执行temp = line时,我得到以下错误

Error:Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/cloudera/parcels/SPARK2-2.1.0.cloudera1-
  1.cdh5.7.0.p0.120904/lib/spark2/python/pyspark/sql/dataframe.py", line 964, in __getattr__
  "'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
AttributeError: 'DataFrame' object has no attribute 'map'

我正在使用pyspark 2.1和Cloudera 5.10

我正在参考链接执行上述脚本:

https://databricks.com/product/getting-started-guide/machine-learning

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

这是因为Dataframe根本没有“映射”。属性。在Spark 2.0之前,它有,但现在不行了。 Databricks没有更新教程。您可以通过转换为rdd 映射,即 df.rdd

答案 1 :(得分:2)

首先请注意: 有两个单独的ML库: 第一个(从中导入线性代数库)是 pyspark.ml 。 第二个是 pyspark.mllib ,您已从中导入LabelPoint

尝试互操作这两个包裹是一条充满痛苦的道路。尽量坚持下去,坚持下去。

第二,至于你得到的例外情况: temp = df.select("a","b").map(...) dfDataFrame,没有map方法。

但请接受我的第一个建议 - 不要混用 mllib ml 模块。