【发布时间】:2021-02-15 16:48:26
【问题描述】:
当我想以isin() 的样式过滤 MapType 列上的数据框时,最好的策略是什么?
所以基本上我想获取数据框的所有行,其中 MapType 列的内容与 MapType-“实例”列表中的条目之一匹配。也可以加入该列,但到目前为止我尝试的所有方法都失败了,因为EqualTo does not support ordering on type map。
除了使用 isin() 或 join() 的直接方法之外,我还提出了使用 to_json() 将地图转储到 json 的想法,然后过滤 Json 字符串,但这似乎是随机排序的键,所以这个字符串比较也不可靠?
我错过了什么简单的东西吗?您建议如何解决这个问题?
例子df:
+----+---------------------------------------------------------+
|key |metric |
+----+---------------------------------------------------------+
|123k|Map(metric1 -> 1.3, metric2 -> 6.3, metric3 -> 7.6) |
|d23d|Map(metric1 -> 1.5, metric2 -> 2.0, metric3 -> 2.2) |
|as3d|Map(metric1 -> 2.2, metric2 -> 4.3, metric3 -> 9.0) |
+----+---------------------------------------------------------+
过滤器(伪代码):
df.where(metric.isin([
Map(metric1 -> 1.3, metric2 -> 6.3, metric3 -> 7.6),
Map(metric1 -> 1.5, metric2 -> 2.0, metric3 -> 2.2)
])
期望的输出:
----+---------------------------------------------------------+
|key |metric |
+----+---------------------------------------------------------+
|123k|Map(metric1 -> 1.3, metric2 -> 6.3, metric3 -> 7.6) |
|d23d|Map(metric1 -> 1.5, metric2 -> 2.0, metric3 -> 2.2) |
+----+---------------------------------------------------------+
【问题讨论】:
-
匹配是什么意思?匹配键还是匹配值?还是两者兼而有之?
标签: apache-spark pyspark apache-spark-sql pyspark-dataframes