gpt4 book ai didi

scala - 使用 Scala 将 org.apache.spark.mllib.linalg.Vector RDD 转换为 Spark 中的 DataFrame

转载 作者:行者123 更新时间:2023-12-01 02:02:57 25 4
gpt4 key购买 nike

我有一个 [Int Int Int] 的 org.apache.spark.mllib.linalg.Vector RDD。
我正在尝试使用此代码将其转换为数据帧

import sqlContext.implicits._
import org.apache.spark.sql.types.StructType
import org.apache.spark.sql.types.StructField
import org.apache.spark.sql.types.DataTypes
import org.apache.spark.sql.types.ArrayData

vectrdd 属于 org.apache.spark.mllib.linalg.Vector 类型
val vectarr = vectrdd.toArray()
case class RFM(Recency: Integer, Frequency: Integer, Monetary: Integer)
val df = vectarr.map { case Array(p0, p1, p2) => RFM(p0, p1, p2) }.toDF()

我收到以下错误
warning: fruitless type test: a value of type         
org.apache.spark.mllib.linalg.Vector cannot also be a Array[T]
val df = vectarr.map { case Array(p0, p1, p2) => RFM(p0, p1, p2) }.toDF()

error: pattern type is incompatible with expected type;
found : Array[T]
required: org.apache.spark.mllib.linalg.Vector
val df = vectarr.map { case Array(p0, p1, p2) => RFM(p0, p1, p2) }.toDF()

我试过的第二种方法是这个
val vectarr=vectrdd.toArray().take(2)
case class RFM(Recency: String, Frequency: String, Monetary: String)
val df = vectrdd.map { case (t0, t1, t2) => RFM(p0, p1, p2) }.toDF()

我收到这个错误
error: constructor cannot be instantiated to expected type;
found : (T1, T2, T3)
required: org.apache.spark.mllib.linalg.Vector
val df = vectrdd.map { case (t0, t1, t2) => RFM(p0, p1, p2) }.toDF()

我用这个例子作为指导 >>
Convert RDD to Dataframe in Spark/Scala

最佳答案

vectarr类型为 Array[org.apache.spark.mllib.linalg.Vector] ,所以在模式匹配中你不能匹配 Array(p0, p1, p2)因为匹配的是一个向量,而不是数组。

另外,你不应该做 val vectarr = vectrdd.toArray() - 这会将 RDD 转换为数组,然后最终调用 toDF不会工作,因为 toDF仅适用于 RDD。

正确的行将是(如果您将 RFM 更改为 double )

val df = vectrdd.map(_.toArray).map { case Array(p0, p1, p2) => RFM(p0, p1, p2)}.toDF()

或者,等效地,替换 val vectarr = vectrdd.toArray() (产生 Array[Vector] )和 val arrayRDD = vectrdd.map(_.toArray()) (生产 RDD[Array[Double]])

关于scala - 使用 Scala 将 org.apache.spark.mllib.linalg.Vector RDD 转换为 Spark 中的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34688258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com