如何解决是否可以遍历分层数组列以从另一个数据帧中获取并汇总结果?
说我在dfA中有一些数据,例如,一个键(pid)和一个数组类型列(category_ids_array):
val dfA = spark.createDF(
Array(
("10009004",Array("10009004","10348794","546313","546264","2173952")),("10086262",Array("10086262","23009642","3617058","2173952"))
),List(
("pid",StringType,true),("category_ids_array",ArrayType(StringType,true)
)
)
dfA
+----------+---------------------------------------------------+
|pid |category_ids_array |
+----------+---------------------------------------------------+
|10009004 |[10009004,10348794,546313,546264,2173952] |
|10086262 |[10086262,23009642,3617058,2173952] |
+----------+---------------------------------------------------+
我也有数据框B,如下所示:
+----------+------------+---------------------+
|pid |attribute_id|attribute_value |
+----------+------------+---------------------+
|10086262 |10002948 |Rabbit |
|10086262 |10002950 |Unconjugated |
|10009004 |10670938 |BCS207B |
|10086262 |10670938 |BP215734 |
|10009004 |10671048 |0000011756 |
|10086262 |10671048 |19397 |
|10086262 |10671049 |SCIENCE |
|10009004 |10671049 |SCIENCE,LLC |
|10009004 |10671050 |CRYO BLUE |
|10086262 |10671050 |CBR4 |
|10348794 |606921 |Green and Blue |
|23009642 |606921 |Purple and Yellow |
+----------+------------+---------------------+
我的问题是,如何才能尽可能遍历dfA上数组类型行中的每个字符串值,并从dfB中提取匹配结果,但将它们按层次结构顺序展平? dfA具有唯一的pid列表作为“输入”,dfB包含许多相同pid的行,这些行具有不同的attribute_values / id,需要根据输入pid进行汇总。对于我来说,这变得很困难,因为dfA输入字符串的每个结果集都必须覆盖(字符串数组的)下一个输入,因为数组字符串是按层次结构排列的。例如,dfA:10009004的结果集的第一行必须覆盖10348794的结果集,依此类推(如果存在),直到该行数组的末尾(但仍保留先前基于attribute_id不一致的结果)。可能有数百个attribute_ids ...我不知道如何解决这个问题,也许使用zipWith?用地图覆盖?有任何想法吗? 输出看起来像:
+----------+--------+-------------+-----------+----------+--------------+-----------+------------------+
|product_id|10002948|10002950 |10671048 |10670938 |10671049 |10671050 |606921 |
+----------+--------+-------------+-----------+----------+--------------+-----------+------------------+
|10086262 |Rabbit |Unconjugated |19397 |BP215734 |SCIENCE |CBR4 |Purple and Yellow |
|10009004 |[null] |[null] |0000011756 |BCS207B |SCIENCE,LLC |CRYO BLUE |Green and Blue |
+----------+--------+-------------------------+----------+--------------+-----------+------------------+
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。