给出一个带有嵌套的MapType对象和散列出的顶级键的数据帧,我如何过滤掉嵌套映射中的子键?

下面是一个带有样本输入和预期输出的示例.在这里,我想过滤出以fnamelname为关键字的嵌套 map .

输入:-

{
  'h#9l00' : {
     'fname': 'fname1',
     'lname': 'lname1',
     'salary': 100,
     'city': 'xyz'
  },
  'o*5ftr': {
     'fname': 'fname2',
     'lname': 'lname2',
     'city': 'xyz'
  }
}

输出:-

{
  'h#9l00' : {
     'salary': 100,
     'city': 'xyz'
  },
  'o*5ftr': {
     'city': 'xyz'
  }
}

如果我知道我想要删除或保留的密钥列表,有没有一种方法可以编写一个pyspark UDF来解决这个用例?

推荐答案

布设

df.show()

+-------------------------------------------------------------------------------------------------------------------------------------+
|col                                                                                                                                  |
+-------------------------------------------------------------------------------------------------------------------------------------+
|{o*5ftr -> {fname -> fname2, lname -> lname2, city -> xyz}, h#9l00 -> {fname -> fname1, lname -> lname1, salary -> 100, city -> xyz}}|
+-------------------------------------------------------------------------------------------------------------------------------------+

代码

没有必要使用UDF,因为UDF本身就很慢.在这里,我们可以使用内置的高阶函数来实现结果.将值转换函数应用于外部映射中的每个键、值对,然后在内部映射上应用映射过滤器以删除预定义的keys

keys = ['fname', 'lname']
func = F.transform_values('col', lambda _, x: F.map_filter(x, lambda k, _: ~k.isin(keys)))
result = df.withColumn('col', func)

结果

result.show()

+-----------------------------------------------------------------+
|col                                                              |
+-----------------------------------------------------------------+
|{o*5ftr -> {city -> xyz}, h#9l00 -> {salary -> 100, city -> xyz}}|
+-----------------------------------------------------------------+

Python相关问答推荐

Python在通过Inbox调用时给出不同的响应

Pandas使用过滤器映射多列

定义同侪组并计算同侪组分析

使用Python OpenCV的文本检测分割

在Docker中运行HAProxy时无法获得503服务

了解shuffle在NP.random.Generator.choice()中的作用

机器人与Pyton Minecraft服务器状态不和

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

在内部列表上滚动窗口

对Numpy函数进行载体化

即使在可见的情况下也不相互作用

如何让Flask 中的请求标签发挥作用

如何在polars(pythonapi)中解构嵌套 struct ?

无法定位元素错误404

未知依赖项pin—1阻止conda安装""

无法连接到Keycloat服务器

如何在Python中获取`Genericums`超级类型?

如何在Python中使用Iscolc迭代器实现观察者模式?

为什么t sns.barplot图例不显示所有值?'