我无法理解为什么列表不会附加在pyspark中。有人可以看看我的代码吗?
import json
input_file = sc.textFile("data.json")
def extract_func(data):
c_list = []
neighborhoods = data.get('neighborhoods', None)
for n in neighborhoods:
if n == []:
c_list.append('Unknown')
else:
c_list.append(n)
return c_list
示例数据输入:
{'attributes': {'Accepts Credit Cards': True,
'city': 'Edinburgh',
'name': 'Conan Doyle',
'neighborhoods': [],
'stars': 3.5,
'state': 'EDH'}}
此示例条目没有显示邻域,因此我想在列表中附加“unknown”。其他一些数据条目有多个邻域,所以我想通过for循环单独附加它们。
当我运行dat = input_file.map(lambda line: json.loads(line))
后跟dat = dat.flatMap(extract_func)
时,它不会给我Unknown
个邻居条目。
检查几个小时,无法弄清楚出了什么问题,我在这里错过了什么?
答案 0 :(得分:1)
if n == []:
包含一个空列表, True
只会到达并评估为neighborhoods
,但当它自身为空时则不会评估。{p> neighborhoods = data.get("neighborhoods")
if neighborhoods:
c_list = ["Unknown" if n == [] else n for n in neighborhoods]
else:
c_list = ["Unknown"]
您可以将代码简化为:
c_list = (["Unknown" if n == [] else n for n in neighborhoods] if neighborhoods
else ["Unknown"])
或使用条件表达式:
d = {'Engine': u'2.0 TSI MLB', 'Category': 'Category', 'Installation': 'Installation', 'Features': 'Features', 'Title': 'Title', 'Recommended Software': 'Recommended Software', 'UniCONNECT+': 'UniCONNECT+', 'Make': u'AUDI', 'Price': 'Price', 'Stock Power': 'Stock Power', 'Desctiption': 'Description', 'Related Hardware': 'Related Hardware', 'Year': u'2018', 'Hardware Included': 'Hardware Included', 'Model': u'A4', 'Product Type': 'Product Type', 'LB-FT': 'LB-FT', 'HP': 'HP', 'Octane': 'Octane', 'Media1': 'Media1'}