gpt4 book ai didi

scala - 用几列的空值创建DataFrame

转载 作者:行者123 更新时间:2023-12-04 00:08:35 24 4
gpt4 key购买 nike

我正在尝试使用DataFrame创建一个RDD

首先,我使用以下代码创建RDD-

val account = sc.parallelize(Seq(
(1, null, 2,"F"),
(2, 2, 4, "F"),
(3, 3, 6, "N"),
(4,null,8,"F")))


一切正常-


帐户:org.apache.spark.rdd.RDD [(Int,Any,Int,String)] =
ParallelCollectionRDD [0]的并行度为:27


但是当尝试使用以下代码从 DataFrame创建 RDD

account.toDF("ACCT_ID", "M_CD", "C_CD","IND")


我低于错误


java.lang.UnsupportedOperationException:类型为Any的模式不是
支持的


我分析了,每当将 null值放入 Seq时,只有我得到了错误。

有什么方法可以添加空值?

最佳答案

问题是Any太普通了,而Spark却不知道如何序列化它。您应该明确提供一些特定的类型,例如Integer。由于在Scala中无法将null分配给基本类型,因此可以改用java.lang.Integer。所以试试这个:

val account = sc.parallelize(Seq(
(1, null.asInstanceOf[Integer], 2,"F"),
(2, new Integer(2), 4, "F"),
(3, new Integer(3), 6, "N"),
(4, null.asInstanceOf[Integer],8,"F")))


这是输出:

rdd: org.apache.spark.rdd.RDD[(Int, Integer, Int, String)] = ParallelCollectionRDD[0] at parallelize at <console>:24


和对应的DataFrame:

scala> val df = rdd.toDF("ACCT_ID", "M_CD", "C_CD","IND")

df: org.apache.spark.sql.DataFrame = [ACCT_ID: int, M_CD: int ... 2 more fields]

scala> df.show
+-------+----+----+---+
|ACCT_ID|M_CD|C_CD|IND|
+-------+----+----+---+
| 1|null| 2| F|
| 2| 2| 4| F|
| 3| 3| 6| N|
| 4|null| 8| F|
+-------+----+----+---+


您也可以考虑使用更简洁的方法来声明空整数值,例如:

object Constants {
val NullInteger: java.lang.Integer = null
}

关于scala - 用几列的空值创建DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39464350/

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