gpt4 book ai didi

scala - 如何在转换 Scala Spark DF -> RDD 时保留类型?

转载 作者:行者123 更新时间:2023-12-02 09:19:49 24 4
gpt4 key购买 nike

我正在尝试将数据帧转换为 RDD。我的 DataFrame 有类型列,如下所示:

df.printSchema
root
|-- _c0: integer (nullable = true)
|-- num_hits: integer (nullable = true)
|-- session_name: string (nullable = true)
|-- user_id: string (nullable = true)

当我使用 df.rdd 将其转换为 rdd 时,我得到一个类型为 Array[org.apache.spark.sql.Row] 的 rdd但是当我使用 rdd(0)(0) 访问每个条目时, rdd(0)(1)等等。我知道它们都有类型 Any 。当我将 DataFrame 转换为 RDD 时,如何保持 DataFrame 的相同类型?换句话说:如何让 rdd 中的列具有类型 Int , Int , String , String ,以便它们匹配数据框?

最佳答案

您可以将DataFrame转换为Dataset[(Int, Int, String, String)],例如

scala> val df = Seq((1, 2, "a", "b")).toDF("_c0", "num_hits", "session_name", "user_id")
df: org.apache.spark.sql.DataFrame = [_c0: int, num_hits: int ... 2 more fields]

scala> df.printSchema
root
|-- _c0: integer (nullable = false)
|-- num_hits: integer (nullable = false)
|-- session_name: string (nullable = true)
|-- user_id: string (nullable = true)


scala> val rdd = df.as[(Int, Int, String, String)].rdd
rdd: org.apache.spark.rdd.RDD[(Int, Int, String, String)] = MapPartitionsRDD[3] at rdd at <console>:25

如果_c0num_hits可以为null,只需将Int更改为java.lang。整数

关于scala - 如何在转换 Scala Spark DF -> RDD 时保留类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43642972/

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