Tôi đang cố triển khai trình phân loại tài liệu bằng Apache Spark MLlib và tôi đang gặp một số vấn đề thể hiện dữ liệu. Mã của tôi là như sau:Từ DataFrame tới RDD [LabeledPoint]
import org.apache.spark.sql.{Row, SQLContext}
import org.apache.spark.sql.types.{StringType, StructField, StructType}
import org.apache.spark.ml.feature.Tokenizer
import org.apache.spark.ml.feature.HashingTF
import org.apache.spark.ml.feature.IDF
val sql = new SQLContext(sc)
// Load raw data from a TSV file
val raw = sc.textFile("data.tsv").map(_.split("\t").toSeq)
// Convert the RDD to a dataframe
val schema = StructType(List(StructField("class", StringType), StructField("content", StringType)))
val dataframe = sql.createDataFrame(raw.map(row => Row(row(0), row(1))), schema)
// Tokenize
val tokenizer = new Tokenizer().setInputCol("content").setOutputCol("tokens")
val tokenized = tokenizer.transform(dataframe)
// TF-IDF
val htf = new HashingTF().setInputCol("tokens").setOutputCol("rawFeatures").setNumFeatures(500)
val tf = htf.transform(tokenized)
tf.cache
val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features")
val idfModel = idf.fit(tf)
val tfidf = idfModel.transform(tf)
// Create labeled points
val labeled = tfidf.map(row => LabeledPoint(row.getDouble(0), row.get(4)))
Tôi cần sử dụng các khung dữ liệu để tạo mã thông báo và tạo các tính năng TF-IDF. Sự cố xuất hiện khi tôi cố chuyển đổi khung dữ liệu này thành RDD [LabeledPoint]. Tôi ánh xạ các hàng dataframe, nhưng phương thức get của Row trả về một kiểu bất kỳ, không phải kiểu được định nghĩa trên lược đồ dataframe (Vector). Vì vậy, tôi không thể xây dựng RDD tôi cần đào tạo một mô hình ML.
Tùy chọn tốt nhất để nhận RDD [LabeledPoint] sau khi tính TF-IDF là gì?
tôi nhận được lỗi này: lỗi: các loại của các đối số kiểu (Vector) không phù hợp với các loại dự kiến của các tham số kiểu (loại T). Thông số loại của Vector không khớp với thông số dự kiến của loại T: loại Vector có một thông số loại, nhưng loại T không có – Miguel
@Miguel Tôi gặp lỗi tương tự và tìm thấy sửa chữa tốt từ [đây] (https: //community.hortonworks .com/questions/6020/type-error-khi-try-linear-regression.html) Bạn cần nhập khẩu lớp Spark Vector một cách rõ ràng vì Scala nhập khẩu kiểu Vector được xây dựng của nó theo mặc định. 'nhập org.apache.spark.mllib.linalg. {Vector, Vectors}' và sau đó mã của Chris sẽ hoạt động. – Ben