arrays - 将列与多行数组合并

标签 arrays apache-spark pyspark apache-spark-sql aggregation

我正在尝试合并数据集中的数据,如下所示:

<表类=“s-表”> <标题> id 短信 长描述 其他字段 <正文> 123 contentSms 内容描述 xxx 123 contentSms2 ContentDesc2 xxx 123 contentSms3 ContentDesc3 xxx 456 contentSms4 内容描述 xxx

sms 和 longDescription 具有以下结构:

sms:array
|----element:struct
      |----content:string
      |----languageId:string

目的是捕获具有相同Id的数据,并将smslongDescription列合并到一个具有多个结构体的数组中(以languageID为键):

<表类=“s-表”> <标题> id 短信 长描述 其他字段 <正文> 123 contentSms、ContentSms2、contentSms3 内容描述,内容描述2,内容描述3 xxx 456 contentSms4 内容描述 xxx

我尝试过使用

x = df.select("*").groupBy("id").agg( collect_list("sms"))

但结果是:

collect_list(longDescription): array (nullable = false)
 |    |-- element: array (containsNull = false)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- content: string (nullable = true)
 |    |    |    |-- languageId: string (nullable = true)

这是一个太多的数组,因为目标是拥有一个结构数组以获得以下结果:

sms: [{content: 'aze', languageId:'en-GB'},{content: 'rty', languageId:'fr-BE'},{content: 'poiu', languageId:'nl-BE'}]

最佳答案

您正在寻找flatten功能:

x = df.groupBy("id").agg(flatten(collect_list("sms")))

关于arrays - 将列与多行数组合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70787929/

相关文章:

C:当从数组引用时,我的结构的属性不会改变?

c++ - 使用数组实现四叉树

apache-spark - Spark : How to increase drive size in slaves

apache-spark - 错误: Could not find valid SPARK_HOME while searching: (Pycharm in windows)

python - 针对使用 Pyspark mllib ALS/MatrixFactorizationModel 的用户子集的建议

java - 获取java中特殊字符前的字符串值

java - 生成与 3 位代码仅相差一位数的所有 3 位代码

amazon-web-services - 使用 aws sts assume-role 配置 AWS EMR spark

java - 如何在 Spark Streaming 应用程序中从 Kafka 接收 Java 对象

python - 在 Pyspark 中将列类型从字符串更改为日期