【发布时间】:2021-12-27 18:43:11
【问题描述】:
我有一些来自 json 的示例数据,看起来类似于以下内容:
{ hero: axe, attribute: strength, active_abilities: [q, w, r], inactive_abilities: e }
{ hero: invoker, attribute: intelligence, active_abilities: [q, w, e, r, f, d], inactive_abilities: null }
{ hero: phantom assassin, attribute: agility, active_abilities: [q, w, e], inactive_abilities: r }
{ hero: life stealer, attribute: strength, active_abilities: [q, r], inactive_abilities: [w, e] }
我遇到的问题是,由于该列中可能存在的数据类型的可变性,“inactive_abilities”列被读取为字符串。数据可能为空、单个字符串(如果只有 1 个能力)、一个数组(如果有多个能力)。我最终想要的是根据“inactive_abilities”的数量创建几个新列。如果只有 1 个或 null 能力,我想要一个新列 inactive_ability 仅在有一个不活动能力时才会填充,如果没有或有多个不活动能力则为 null。然后我想要多个列,如 inactive_ability1、inactive_ability2、inactive_ability3 等......在数组持有 > 1 值的情况下。所以从上面的例子来看,最终的结果应该是这样的:
{ hero: axe, attribute: strength, active_abilities: [q, w, r], inactive_abilities: e , inactive_ability: e, inactive_ability1: null, inactive_ability2: null, inactive_ability3, null, inactive_ability4: null}
{ hero: invoker, attribute: intelligence, active_abilities: [q, w, e, r, f, d], inactive_abilities: null, inactive_ability: null, inactive_ability1: null, inactive_ability2: null, inactive_ability3, null, inactive_ability4: null }
{ hero: phantom assassin, attribute: agility, active_abilities: [q, w, e], inactive_abilities: r, inactive_ability: r, inactive_ability1: null, inactive_ability2: null, inactive_ability3, null, inactive_ability4: null }
{ hero: life stealer, attribute: strength, active_abilities: [q, r], inactive_abilities: [w, e], inactive_ability: null, inactive_ability1: w, inactive_ability2: e, inactive_ability3, null, inactive_ability4: null }
我不能假设会有固定数量的“inactive_abilities”,但如果超过 4 个,其余的可以忽略。我遇到问题的部分是能够将字段转换为数组并在适当的时候读取它,然后根据上述条件创建和填充新列。
【问题讨论】:
标签: pyspark