2017-10-14 164 views
0

下面是我的数据框和代码Pyspark ML错误对象有没有属性地图

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 =行,我得到以下错误

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

请帮我解决这个问题。

回答

1

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

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

其次,作为例外,你有: temp = df.select("a","b").map(...) dfDataFrame,它不具有map方法。

但请把我的第一个忠告 - 不要混用mllib毫升模块。

+0

非常感谢Elior。真的,我需要这些评论来确定我的载体,我会采取你的建议。在这里,我试图实现功能,这是没有理解的原因是导入包 – user3292373

+0

总是很高兴提供帮助。我比较喜欢_pyspark.ml_库,而不是_mllib_。 如果您缺少功能,请让我知道。 –

2

这是因为Dataframe根本没有'map'属性。在Spark 2.0之前,它已经有了,但现在已经不复存在了。 Databricks没有更新教程。您可以地图通过转换为RDD,即df.rdd

+0

谢谢卢卡斯。现在掌握了数据。我总是处理数据帧。发现非常非常难以处理这些densevector。现在一步步推进 – user3292373

相关问题