gpt4 book ai didi

scala - Spark 2.0 隐式编码器,当类型为 Option[Seq[String]] 时处理缺失列(scala)

转载 作者:行者123 更新时间:2023-12-04 14:55:42 25 4
gpt4 key购买 nike

当我们的数据源中缺少某些类型为 Option[Seq[String]] 的列时,我在编码数据时遇到了一些问题。理想情况下,我希望用 None 填充缺失的列数据。 .

设想:

我们有一些正在读取的 Parquet 文件,其中包含 column1 但没有 column2。

我们将这些 parquet 文件中的数据加载到 Dataset , 并将其转换为 MyType .

case class MyType(column1: Option[String], column2: Option[Seq[String]])

sqlContext.read.parquet("dataSource.parquet").as[MyType]

org.apache.spark.sql.AnalysisException: cannot resolve 'column2' given input columns: [column1];



有没有办法使用 column2 数据创建数据集 None ?

最佳答案

在简单的情况下,您可以提供一个初始模式,它是预期模式的超集。例如在你的情况下:

val schema = Seq[MyType]().toDF.schema

Seq("a", "b", "c").map(Option(_))
.toDF("column1")
.write.parquet("/tmp/column1only")

val df = spark.read.schema(schema).parquet("/tmp/column1only").as[MyType]
df.show

+-------+-------+
|column1|column2|
+-------+-------+
| a| null|
| b| null|
| c| null|
+-------+-------+

df.first

MyType = MyType(Some(a),None)

这种方法可以 有点脆弱所以一般来说,你应该使用 SQL 文字来填补空白:

spark.read.parquet("/tmp/column1only")
// or ArrayType(StringType)
.withColumn("column2", lit(null).cast("array<string>"))
.as[MyType]
.first

MyType = MyType(Some(a),None)

关于scala - Spark 2.0 隐式编码器,当类型为 Option[Seq[String]] 时处理缺失列(scala),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454144/

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