2017-09-24 36 views
0

我不明白爲什麼列表不會附加在pyspark。有人可以幫我看看我的代碼嗎?如果else語句在for循環附加到列表

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'}} 

這個例子項不都表現出了社區,所以我想追加「未知」的名單。其他一些數據項有多個鄰域,所以我想通過for循環逐個追加它們。

當我運行dat = input_file.map(lambda line: json.loads(line))後跟dat = dat.flatMap(extract_func),它不會給我Unknown鄰域條目。

正在檢查幾小時,無法弄清楚什麼是錯,我在這裏錯過了什麼?

+0

你能解釋一下你所說的「列表中沒有追加」是什麼意思?什麼應該附加到什麼?你正在調用'data.get()',但數據沒有被定義。數據應該是什麼?你指的是什麼'dat'變量? – charlesreid1

+0

如果'n'正在迭代字典,它將被設置爲字典的鍵值,而不是值。 –

+0

在你的'data'中,''neighborhoods'是'attributes'的子鍵,所以你必須先從它得到第一個和''neighborhoods'。 –

回答

1

if n == []:將只能達到和評價True如果neighborhoods包含一個空列表,而不是在它的本身是空的。您可以簡化代碼:

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"]) 
+1

謝謝你指出空列表問題!這正是我卡住的地方。 –