gpt4 book ai didi

java - 从 rdd 对象文件创建数据框

转载 作者:行者123 更新时间:2023-12-01 11:29:07 26 4
gpt4 key购买 nike

从保存为对象文件的 RDD 创建 ddf 的方法是什么。我想加载 RDD,但我没有 java 对象,只有一个我想用作 ddf 架构的结构类型。

我尝试检索为 Row

    val myrdd = sc.objectFile[org.apache.spark.sql.Row]("/home/bipin/"+name)

但我明白了

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to org.apache.spark.sql.Row

有没有办法做到这一点。

编辑

据我了解,我必须将 rdd 作为对象数组读取并将其转换为行。如果有人能给出一个方法,那就可以接受。

最佳答案

如果您有一个对象数组,则只需对 Any 数组使用 Row apply 方法。代码如下:

val myrdd = sc.objectFile[Array[Object]]("/home/bipin/"+name).map(x => Row(x))

编辑

你是@user568109,这将创建一个只有一个字段的数据框,该字段将是一个数组来解析整个数组,你必须这样做:

val myrdd = sc.objectFile[Array[Object]]("/home/bipin/"+name).map(x => Row.fromSeq(x.toSeq))

正如@user568109所说,还有其他方法可以做到这一点:

val myrdd = sc.objectFile[Array[Object]]("/home/bipin/"+name).map(x => Row(x:_*))

无论您选择哪一个,因为两者都是相同代码的包装器:

  /**
* This method can be used to construct a [[Row]] with the given values.
*/
def apply(values: Any*): Row = new GenericRow(values.toArray)

/**
* This method can be used to construct a [[Row]] from a [[Seq]] of values.
*/
def fromSeq(values: Seq[Any]): Row = new GenericRow(values.toArray)

关于java - 从 rdd 对象文件创建数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30567099/

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