我有一个叫hadoop的表 table_with_json_string
例如:
+-----------------------------------+---------------------------------+
| creation_date | json_string_colum |
+-----------------------------------+---------------------------------+
| 2020-01-29 | "{keys : {1 : 'a', 2 : 'b' }}" |
+-----------------------------------+---------------------------------+
期望输出:
+-----------------------------------+----------------------------------+----------+
| creation_date | json_string_colum | keys |
+-----------------------------------+----------------------------------+----------+
| 2020-01-29 | "{keys : {1 : 'a', 2 : 'b' }}" | 1 |
| 2020-01-29 | "{keys : {1 : 'a', 2 : 'b' }}" | 2 |
+-----------------------------------+----------------------------------+----------+
我试着:
from pyspark.sql import functions as sf
from pyspark.sql import types as st
from pyspark.sql.functions import from_json, col,explode
from pyspark.sql.types import StructType, StructField, StringType,MapType
schema = StructType([StructField("keys",
MapType(StringType(),StringType()),True)])
df = spark.table('table_with_json_string').select(col("creation_date"),col("json_string_colum"))
df = df.withColumn("map_json_column", from_json("json_string_colum",schema))
df.show(1,False)
+--------------------+-------------------------------------+----------------------------------+
| creation_date| json_string_colum | map_json_column |
+--------------------+-------------------------------------+----------------------------------+
| 2020-01-29 | "{keys : {1 : 'a', 2 : 'b' }}" | [Map(1 ->'a',2 ->'b')] |
+--------------------+-------------------------------------+----------------------------------+
1-我怎么能把钥匙从这里取出 MapType
反对?我明白我需要 explode
函数以达到所需的表格式,但我仍然不知道如何将json对象的键提取为数组格式。
如果更容易达到我的目标,我愿意接受其他方法。
1条答案
按热度按时间2o7dmzc51#
根据您目前所做的工作,您可以获得以下密钥:
结果:
以下是获得上述答案的详细步骤:
为了清楚起见,我上面使用的功能Map键在pyspark2.3中是可用的+