【发布时间】:2018-12-06 04:53:19
【问题描述】:
由于 parquet 无法解析空数组,我在写表之前将空数组替换为 null。现在,当我阅读表格时,我想做相反的事情:
我有一个具有以下架构的 DataFrame:
|-- id: long (nullable = false)
|-- arr: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- x: double (nullable = true)
| | |-- y: double (nullable = true)
以及以下内容:
+---+-----------+
| id| arr|
+---+-----------+
| 1|[[1.0,2.0]]|
| 2| null|
+---+-----------+
我想将空数组 (id=2) 替换为空数组,即
+---+-----------+
| id| arr|
+---+-----------+
| 1|[[1.0,2.0]]|
| 2| []|
+---+-----------+
我试过了:
val arrSchema = df.schema(1).dataType
df
.withColumn("arr",when($"arr".isNull,array().cast(arrSchema)).otherwise($"arr"))
.show()
给出:
java.lang.ClassCastException: org.apache.spark.sql.types.NullType$ 无法转换为 org.apache.spark.sql.types.StructType
编辑:我不想“硬编码”我的数组列的任何架构(至少不是结构的架构),因为这可能因情况而异。我只能在运行时使用来自df 的架构信息
顺便说一句,我使用的是 Spark 2.1,因此我无法使用 typedLit
【问题讨论】:
标签: scala apache-spark