Spark:Select Any 类型值的特定索引
Spark: Select specific Index of value of type Any
所以我有一个 DataFrame,其中一列的类型为 WrappedArray(JSON)。在每一个中,JSON 都有一个格式 [String, String]
我已经成功地访问了数组的内部,现在我有一个 Any 类型的列,其中每个值都有一个 [String, String]。
要点是:我只想获取这两个字符串的第一个值,但是如果我尝试类似 column(0) 的操作,它会引发错误,因为 Any 没有索引。我怎样才能访问这个值?
我现在的代码是:
val schema = StructType(Seq(
StructField("productId", StringType, true),
StructField("name", StringType, true)
))
df.withColumn("column", from_json($"column"(0), schema) )
以及我的 df 的架构:
root
|-- customerId: string (nullable = true)
|-- column: struct (nullable = true)
| |-- productId: string (nullable = true)
| |-- name: string (nullable = true)
|-- date: date (nullable = true)
我自己设法解决了这个问题。答案很明显:我没有创建包含两个值的 struct 类型的列,而是创建了一个具有相同值的 MapType。
我的最终代码:
df.withColumn("column", from_json($"column"(0), MapType(StringType, StringType)) )
然后,访问新列的键和值:
.select("column.productId", "column.name")
所以我有一个 DataFrame,其中一列的类型为 WrappedArray(JSON)。在每一个中,JSON 都有一个格式 [String, String] 我已经成功地访问了数组的内部,现在我有一个 Any 类型的列,其中每个值都有一个 [String, String]。 要点是:我只想获取这两个字符串的第一个值,但是如果我尝试类似 column(0) 的操作,它会引发错误,因为 Any 没有索引。我怎样才能访问这个值?
我现在的代码是:
val schema = StructType(Seq(
StructField("productId", StringType, true),
StructField("name", StringType, true)
))
df.withColumn("column", from_json($"column"(0), schema) )
以及我的 df 的架构:
root
|-- customerId: string (nullable = true)
|-- column: struct (nullable = true)
| |-- productId: string (nullable = true)
| |-- name: string (nullable = true)
|-- date: date (nullable = true)
我自己设法解决了这个问题。答案很明显:我没有创建包含两个值的 struct 类型的列,而是创建了一个具有相同值的 MapType。
我的最终代码:
df.withColumn("column", from_json($"column"(0), MapType(StringType, StringType)) )
然后,访问新列的键和值:
.select("column.productId", "column.name")