我有以下Dataframe
+-------+--------------------------------
|__key__|______value____________________|
| 1 | {"name":"John", "age": 34} |
| 2 | {"name":"Rose", "age": 50} |
我想检索这个Dataframe中的所有年龄值,然后将其存储在数组中。
val x = df_clean.withColumn("value", col("value.age"))
x.show(false)
但这引发了一个例外。
线程“main”org.apache.spark.sql.analysisexception中出现异常:无法从值中提取值#89:需要struct type,但得到string;
如何解决我的要求
编辑
val schema = existingSparkSession.read.json(df_clean.select("value").as[String]).schema
val my_json = df_clean.select(from_json(col("value"), schema).alias("jsonValue"))
my_json.printSchema()
val df_final = my_json.withColumn("age", col("jsonValue.age"))
df_final.show(false)
目前没有抛出异常。但我也看不到任何输出
编辑2
println("---+++++--------")
df_clean.select("value").take(1)
println("---+++++--------")
输出
---+++++--------
---+++++--------
1条答案
按热度按时间d8tt03nd1#
如果您有很长的json并且想要创建模式,那么您可以使用
from_json
使用架构。输出:
架构:
如果您直接需要访问嵌套字段,那么可以使用
get_json_object
```df.withColumn("name", get_json_object($"value", "$.name"))
.withColumn("age", get_json_object($"value", "$.age"))
.show(false)