繁体   English   中英

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

[英]How to preserve types while converting Scala Spark DF -> RDD?

我正在尝试将数据帧转换为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中的列具有IntIntStringString ,以便它们与Dataframe匹配?

您可以将您的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.Integer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM