我有一个这样的数据框:
+------------+-----------------+------------------------------------+
| Name | Age | Answers |
+------------+-----------------+------------------------------------+
| Maria | 23 | [apple, mango, orange, banana] |
| John | 55 | [apple, orange, banana] |
| Brad | 44 | [banana] |
| Alex | 55 | [apple, mango, orange, banana] |
+------------+-----------------+------------------------------------+
“Answers”列包含一个元素数组。
我的预期输出:
+-----+---+--------+-------+
| Name|Age| answer| value |
+-----+---+--------+-------+
|Maria| 23| apple| True |
|Maria| 23| mango| True |
|Maria| 23| orange| True |
|Maria| 23| banana| True |
| John| 55| apple| True |
| John| 55| mango| False |
| John| 55| orange| True |
| John| 55| banana| True |
| Brad| 44| apple| False |
| Brad| 44| mango| False |
| Brad| 44| orange| False |
| Brad| 44| banana| True |
|Alex | 55| apple| True |
|Alex | 55| mango| True |
|Alex | 55| orange| True |
|Alex | 55| banana| True |
+-----+---+--------+-------+
如何分解“Answers”列,以便根据数组得到“value”列的True或False?
例如,
| John| 55| mango| False |
John的答案中没有“mango”。因此值为false。类似地,对于布拉德,将有三个false行。
2条答案
按热度按时间u3r8eeie1#
在展开之前,您可以收集“Answers”列中的所有可能值。将它们添加到数据框中,展开并选择所需的列。
输入:
脚本:
zbdgwd5y2#
利用
transform
和arrays_zip
函数的一种方法collect_set
沿着flatten
和array_distinct
可以做到这一点。transform
对照先前为每个姓名提供的答案数组检查收集的每个答案。如果该元素存在,则标记为True
。arrays_zip
将压缩2个数组以创建一个结构体数组,其中第N个结构体将具有每个数组中的第N个元素。inline
sql函数有助于从结构字段展开和创建新列