使用sparkDataframe。
scala> val df_input = Seq( ("p1", """{"a": 1, "b": 2}"""), ("p2", """{"c": 3}""") ).toDF("p_id", "p_meta")
df_input: org.apache.spark.sql.DataFrame = [p_id: string, p_meta: string]
scala> df_input.show()
+----+----------------+
|p_id| p_meta|
+----+----------------+
| p1|{"a": 1, "b": 2}|
| p2| {"c": 3}|
+----+----------------+
给定这个输入df,是否可以通过json键将其拆分以创建一个新的df\u输出,如下面的输出?
数据框输出=
p_id p_meta_key p_meta_value
p1 a 1
p1 b 2
p2 c 3
我使用的是spark版本3.0.0/scala 2.12.x。我更喜欢用 spark.sql.functions._
2条答案
按热度按时间hec6srdp1#
另一种选择-
from_json
+explode
```val df_input = Seq( ("p1", """{"a": 1, "b": 2}"""), ("p2", """{"c": 3}""") )
.toDF("p_id", "p_meta")
df_input.show(false)
/**
* +----+----------------+
* |p_id|p_meta |
* +----+----------------+
* |p1 |{"a": 1, "b": 2}|
* |p2 |{"c": 3} |
* +----+----------------+
*/
rqqzpn5f2#
下面的代码将解决您的问题,我已经在spark 3.0.0/scala 2.12.10中对此进行了测试。