请教各位大神,我想要在如下数据结构的spark rdd中提取出内嵌的字典,如{"a":"115xx","b":"116yy","c":"117zz"},不使用lambda函数,pyspark该如何实现呢?
[{"_1":{"a":"115xx","b":"116yy","c":"117zz"}},{"_1":{"a":"115aa","b":"116bb","c":"117cc"},{"_1":{"a":"115ee","b":"116ff","c":"117gg"}}]
本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 点击这里欢迎加入感兴趣的技术领域群。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在PySpark中处理这样的数据结构,您可以通过RDD的map
方法来实现提取内嵌字典的功能,而不需要直接使用lambda函数。不过,实际上在Python中,map
函数内部常用的就是匿名函数(也就是lambda),但根据您的要求,我们可以用定义好的普通函数来替代。下面是一个示例:
假设您已经有了一个SparkContext实例sc
,并且已经创建了一个包含上述数据的RDD,如下所示:
data = [{"_1":{"a":"115xx","b":"116yy","c":"117zz"}},{"_1":{"a":"115aa","b":"116bb","c":"117cc"}},{"_1":{"a":"115ee","b":"116ff","c":"117gg"}}]
rdd = sc.parallelize(data)
您可以定义一个普通的Python函数来完成提取操作:
def extract_dict(record):
"""从记录中提取内嵌的字典"""
return record["_1"]
# 使用map转换RDD
extracted_rdd = rdd.map(extract_dict)
这样,extracted_rdd
就包含了您想要的结果,即每个元素都是原始字典中的"_1"
键对应的字典。
如果您是在Databricks Notebook或者有使用DataFrame和Spark SQL的需求,也可以考虑将RDD转换为DataFrame进行操作,这通常会提供更丰富的功能和更好的性能。但对于您当前的问题,上述RDD操作已经足够解决问题。