Apache Spark 如果缺少列,如何在从Dataframe解析的数据集中设置默认值

pn9klfpd  于 2022-12-13  发布在  Apache
关注(0)|答案(1)|浏览(102)

我正在尝试使用case类从Dataframe创建DataSet。

case class test (language:String, users_count: String = "100")

+--------+-----------+
|language|users_count|
+--------+-----------+
|    Java|      20000|
|  Python|     100000|
|   Scala|       3000|
+--------+-----------+

df.as[test]

如何处理 Dataframe 中缺少列的情况?期望数据集填充case类中提供的默认值。
如果 Dataframe 只有一列,则会引发异常
org.apache.spark.sql.AnalysisException:无法解析给定输入列的“users_count”:[语言文字];
预期结果:

+--------+
|language|
+--------+
|    Java|      
|  Python|     
|   Scala| 
+--------+

df.as[test].collect(0)
test('Java',100) // where 100 is the default value
ckx4rj1h

ckx4rj1h1#

您可以使用map函数并显式调用构造函数,如下所示:

df
    .map(row => test(row.getAs[String]("language")))
    .show
+--------+-----------+
|language|users_count|
+--------+-----------+
|    Java|        100|
|  Python|        100|
|   Scala|        100|
+--------+-----------+

相关问题