2017-10-14 198 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

相關問題