以下是我的数据框和代码
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 DenseVectorfrom pyspark.mllib.regression import LabeledPointtemp = df.select("a","b").map(lambda line:LabeledPoint(line[0],[line[1:]]))
当我执行temp=这一行时,得到以下错误
错误: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
请帮助我解决这个问题。
回答:
首先请注意:有两个独立的ML库:第一个是你导入的线性代数库,即pyspark.ml。第二个是从pyspark.mllib导入的LabelPoint
。
尝试混用这两个包会遇到很多问题。尽量坚持使用一个,不要混用。
其次,关于你遇到的异常:temp = df.select("a","b").map(...)
df
是一个DataFrame
,它没有map
方法。
但请接受我的第一个建议 – 不要混用mllib和ml模块。