2017-11-25 10 views
0

私のCSVファイルには4つのカラムと多数のローがあります。spark pythonのキーとして2つのカラムを使用する

Date(MM/DD/YY) Arr_Dep  Dom_Int    Num_Fl 
01/01/15 0:00 Arrival  Domestic   357 
03/01/15 0:00 Arrival  International  269 
06/01/15 0:00 Departure Domestic   82 
08/01/15 0:00 Departure International  5 
05/01/16 0:00 Arrival  Domestic   44 
06/01/16 0:00 Arrival  Domestic   57 
07/01/16 0:00 Departure International  51 
08/01/16 0:00 Departure International  40 
08/01/17 0:00 Arrival  Domestic   1996 
10/01/17 0:00 Departure International  21 

飛行機が到着したか出発したかによって、特定の年の月の平均飛行回数を特定する必要があります。だから私は、上記の入力のために期待していた出力は次のようになります。

2015, arrival, 313 
2015, departure, 44 
2016, arrival, 51 
2016, departure, 46 
2017, arrival, 1996 
2017, departure, 21 

私は最終的に得るためにそれを減らすために、私は私のマップ機能で2つの私のキーすなわちArr_Depの列と日付の列を含める必要があります方法についての問題に直面しています平均。 これまでに以下のスクリプトを書いています。処理方法がわからない

from pyspark import SparkContext 
from operator import add 
import sys 

sc = SparkContext(appName="example") 
input_file = sys.argv[1] 
lines = sc.textFile(input_file) 
first = lines.map(lambda x : ((x.split(",")[0].split(" ")[0][5:]).encode('ascii','ignore'), int(x.split(",")[-1]), x.split(",")[1])) 
second = first.filter(lambda x : "Arrival" in x[1] or "Departure" in x[1]) 
third = second.map(lambda x : (x[0],x[1])) 
result = third.reduceByKey("Not sure how to calculate average") 
output = result.collect() 
for v in sorted(output, key = lambda x:x[0]): 
    print '%s, %s' % (v[0], v[1]) 

私は上記のスクリプトについてはわかりません。私はスパークとPythonの新機能です。任意のアイデアを進める方法?

答えて

0

それはSQL APIを使用するのが最適です。

from pyspark.sql.functions import * 

df = spark.read.options(inferSchema=True, header=True).csv(input_file) 
df\ 
    .groupBy(year(to_date("Date(MM/DD/YY)", "MM/dd/yyH:mm")).alias("year"), "Arr_Dep")\ 
    .avg("Num_Fl") 
+0

をしかし、どのように私はこれを使用して平均値を計算するのですか?もっと詳しく説明できますか? – Alex

+0

私は彼の平均機能を使用して平均を計算していると思います! –