spark2.3:展平结构数组,并创建新的列

thigvfpy  于 2021-05-26  发布在  Spark
关注(0)|答案(0)|浏览(218)

我有一个带列的Dataframe ids 看起来像

ids
WrappedArray(WrappedArray([item1,micro], [item3, mini]), WrappedArray([item2,macro]))
WrappedArray(WrappedArray([item1,micro]), WrappedArray([item5,micro], [item6,macro]))

列的确切类型是

StructField(ids,ArrayType(ArrayType(StructType(StructField(identifier,StringType,true), StructField(identifierType,StringType,true)),true),true),true)

我想创建两个新列,其中一个包含所有 identifier 在struct中,另一列包含 identifierType 对于该行(如果有关系,则返回所有关系)。
所以在我们的例子中,我希望输出

list_of_identifiers, most_frequent_type
Array(item1, item2, item3), [micro, mini, macro]
Array(item1, item5, item6), [micro]

为了实现这一点,我需要做的第一步是将 ids 列到类似

ids
WrappedArray([item1,micro], [item3, mini], [item2,macro])
WrappedArray([item1,micro], [item5,micro], [item6,macro])

但我不知道怎么做。
这是一个示例输入表

val arrayStructData = Seq(
  Row(List(List(Row("item1", "micro"),Row("item3", "mini")), List(Row("item2", "macro")))),
  Row(List(List(Row("item1", "micro")), List(Row("item5", "micro"), Row("item6", "macro"))))
)

val arrayStructSchema = new StructType()
  .add("ids", ArrayType(ArrayType(new StructType()
    .add("identifier",StringType)
    .add("identifierType",StringType))))

val df = spark.createDataFrame(spark.sparkContext
  .parallelize(arrayStructData),arrayStructSchema)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题