pyspark ml错误对象没有属性Map

irtuqstp  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(404)

下面是我的Dataframe和代码

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

下面是我的代码

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

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

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

我正在使用pyspark 2.1和cloudera 5.10
我正在参照链接编写上述脚本:
https://databricks.com/product/getting-started-guide/machine-learning
请帮助我解决这个问题。

mdfafbf1

mdfafbf11#

首先请注意:有两个独立的ml库:第一个(您从中导入了线性代数库)是pyspark.ml。第二个是从中导入的pyspark.mllib LabelPoint .
试图互操作这两个包是一条充满痛苦的道路。试着坚持一个,并坚持下去。
第二,关于例外情况:
temp = df.select("a","b").map(...) df 是一个 DataFrame ,它没有 map 方法。
但是请接受我的第一个建议-不要混合使用mllib和ml模块。

ijnw1ujt

ijnw1ujt2#

这是因为dataframe根本没有“map”属性。在spark 2.0之前,它有,但现在不是了。databricks没有更新教程。您可以通过转换为rdd来Map,即df.rdd

相关问题