14

tôi muốn chuyển đổi các khung dữ liệu tia lửa để thêm bằng cách sử dụng mã bên dưới:AttributeError: đối tượng 'DataFrame' không có thuộc tính 'bản đồ'

from pyspark.mllib.clustering import KMeans 
spark_df = sqlContext.createDataFrame(pandas_df) 
rdd = spark_df.map(lambda data: Vectors.dense([float(c) for c in data])) 
model = KMeans.train(rdd, 2, maxIterations=10, runs=30, initializationMode="random") 

Các thông báo lỗi chi tiết là:

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-11-a19a1763d3ac> in <module>() 
     1 from pyspark.mllib.clustering import KMeans 
     2 spark_df = sqlContext.createDataFrame(pandas_df) 
----> 3 rdd = spark_df.map(lambda data: Vectors.dense([float(c) for c in data])) 
     4 model = KMeans.train(rdd, 2, maxIterations=10, runs=30, initializationMode="random") 

/home/edamame/spark/spark-2.0.0-bin-hadoop2.6/python/pyspark/sql/dataframe.pyc in __getattr__(self, name) 
    842   if name not in self.columns: 
    843    raise AttributeError(
--> 844     "'%s' object has no attribute '%s'" % (self.__class__.__name__, name)) 
    845   jc = self._jdf.apply(name) 
    846   return Column(jc) 

AttributeError: 'DataFrame' object has no attribute 'map' 

Có ai biết tôi đã làm gì sai ở đây không? Cảm ơn!

+1

Hãy nhớ rằng MLLIB được xây dựng xung quanh RDD trong khi ML thường được xây dựng xung quanh các khung dữ liệu. Vì bạn dường như đang sử dụng Spark 2.0, tôi khuyên bạn nên tra cứu Quốc gia từ ML: https://spark.apache.org/docs/latest/ml-clustering.html – Jeff

+0

@JeffL: Tôi đã kiểm tra ml và tôi nhận thấy rằng đầu vào phải là tập dữ liệu chứ không phải là khung dữ liệu. Vì vậy, chúng ta cần phải thực hiện một lớp chuyển đổi khác để chuyển đổi khung dữ liệu thành tập dữ liệu để sử dụng ml? – Edamame

+0

Tôi không rõ ràng 100% về sự khác biệt, mặc dù trong Python tôi tin rằng nó gần như là tranh luận. Trong thực tế, nếu bạn duyệt mã github, trong 1.6.1 các phương thức dataframe khác nhau nằm trong mô-đun dataframe, trong khi trong 2.0 các phương thức tương tự đó nằm trong mô-đun tập dữ liệu và không có mô-đun dataframe. Vì vậy, tôi không nghĩ rằng bạn sẽ phải đối mặt với bất kỳ vấn đề chuyển đổi nào giữa dataframe và tập dữ liệu, ít nhất là trong API Python. – Jeff

Trả lời

36

Bạn không thể map một khung dữ liệu, nhưng bạn có thể chuyển đổi khung dữ liệu thành RDD và ánh xạ bằng cách thực hiện spark_df.rdd.map(). Trước Spark 2.0, spark_df.map sẽ đặt bí danh là spark_df.rdd.map(). Với Spark 2.0, trước tiên bạn phải gọi số .rdd.

+0

ngay trên, đây là một trong những thay đổi chính trong dataframes trong tia lửa 2.0 – Mostafa

Các vấn đề liên quan