Python中用字符串索引PySpark返回列表报TypeError错误如何解决
解决方法
1. 转换为字典(你猜想的方案是可行的)
将当前的元组列表直接转成字典后即可通过字符串键查询。注意你返回的包名字段都额外包裹了一层双引号,查询时需要完整匹配:
# 列表转字典 package_count_dict = dict(data) # 匹配带双引号的key print(package_count_dict['"Rcpp"'])
2. 直接遍历列表查询
不想修改数据结构的话,直接遍历列表匹配目标包名即可:
target_pkg = '"Rcpp"' for pkg_name, count in data: if pkg_name == target_pkg: print(count) break else: print("Rcpp不在当前取出的前10条记录范围内")
3. PySpark原生过滤(性能最优)
你现在用take(10)只取了前10条统计结果,如果Rcpp不在前10条里是查不到结果的。如果只需要Rcpp的统计值,不需要把所有包的统计结果都拉到本地,直接在RDD层面过滤即可,全量数据下性能更好:
# 直接在RDD中过滤Rcpp的统计项 rcpp_count = totalbypackage.filter(lambda x: x[0] == '"Rcpp"').first() print(rcpp_count[1])
补充说明
如果需要查询全量数据,把take(10)替换为collect()即可拉取所有包的统计结果到本地,数据量极大的情况下要注意Driver端的内存占用。
如果想去掉包名外层的双引号,在拆分csv字段时加一层去引号处理即可:rdd=lines.map(lambda x: x.split(',')[6].strip('"'))
后续查询就可以直接用"Rcpp"作为key,不需要额外匹配多余的引号。
内容的提问来源于stack exchange,提问作者radhika sharma
相关产品推荐
相关产品推荐

