如何在pyspark中压平字符串列?

xmd2e60i  于 2022-12-03  发布在  Spark
关注(0)|答案(1)|浏览(135)
a                                                                                                                               b
[{'npi': [1013006469, 1003263552], 'tin': {'type': 'npi', 'value': '1013006469'}}, {'npi': [1487607883], 'tin': {'type': 'npi', 'value': '1487607883'}}]    0
[{'npi': [1275086126], 'tin': {'type': 'npi', 'value': '1275086126'}}, {'npi': [1285698381], 'tin': {'type': 'npi', 'value': '1285698381'}}]                2

以上是输入 Dataframe ,我希望从中展开字符串形式的**'a'**列。我需要以下输出

a_npi       a_tin_type  a_tin_value     b
    1013006469  npi         1013006469      0
    1003263552  npi         1013006469      0
    1487607883  npi         1487607883      0
    1275086126  npi         1275086126      2
    1285698381  npi         1285698381      2

下面是我代码,但它返回的都是空值

inp_sch = spark.read.json(df.select(col('a').alias('jsonbody')).rdd.map(lambda x: x.jsonbody)).schema
inp_json = df.select('*', from_json('a', inp_sch).alias('jsonstr'))
jpfvwuh4

jpfvwuh41#

在pyspark中为tin使用from_json函数将完成此操作。
范例

from pyspark.sql.functions import from_json, col
from pyspark.sql.types import StructType, StructField, StringType

schema = StructType(
    [
        StructField('col1', StringType(), True),
        StructField('col2', StringType(), True)
    ]
)

df.withColumn("data", from_json("data", schema))\
    .select(col('data.*'))\
    .show()

和第一列的数组,类似地使用explode()函数。

相关问题