2017-09-24 3 views
0

リストがpysparkに追加されない理由を理解できません。誰かが自分のコードを見るのを助けることができますか?forループのelse文がリストに追加される場合

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

neighborhoods = data.get("neighborhoods") if neighborhoods: c_list = ["Unknown" if n == [] else n for n in neighborhoods] else: c_list = ["Unknown"] 

条件式を使用して:あなたはにコードを簡素化することができますか?何に何が追加されるはずですか?あなたは 'data.get()'を呼び出していますが、データは定義されていません。 「データ」とは何でしょうか?あなたが参照している 'dat'変数は何ですか? – charlesreid1

+0

'n 'がdictに対して反復している場合、値ではなくdictのキーに設定されます。 –

+0

あなたの 'data'' neighborhoods'は' attributes'のサブキーなので、最初から 'neighborhoods'を取得する必要があります。 –

答えて

1

if n == []:しか達し、それが空そのものだとき空のリストが含まれていますが、ない場合はneighborhoodsTrueに評価されます。あなたは「リストが追加されません」によって何を意味するか説明でき

c_list = (["Unknown" if n == [] else n for n in neighborhoods] if neighborhoods 
      else ["Unknown"]) 
+1

空リスト問題を指摘していただきありがとうございます!これは私が立ち往生した場所です。 –

関連する問題