2016-09-08 2 views
0

BikeSharing 데이터 세트와 함께 스파크 결정 트리 모델의 결과를 사용하려고하는데 결과 결과를 [(날짜, 실제 값, 예측 값)] 형식으로 원합니다.3 개의 RDD 오브젝트를 결합한 스파크

하지만 결과는 다음 코드로 [(날짜, (실제 값, 예상 값))]입니다. 원하는 결과물을 얻으려면 어떻게해야합니까? 고맙습니다!

raw_data = sc.textFile(filename) 
records = raw_data.map(lambda x: x.split(",")) 
records.cache() 
data_dt = records.map(lambda r: LabeledPoint(extract_label(r), extract_features_dt(r))) 
dt_model = DecisionTree.trainRegressor(data_dt, {}) 
preds = dt_model.predict(data_dt.map(lambda p: p.features)) 
actual = records.map(lambda p: extract_label(p)) 
true_vs_predicted_dt = actual.zip(preds) 
date = records.map(lambda x: x[1]) 
true_vs_predicted_dt = date.zip(true_vs_predicted_dt) 
true_vs_predicted_dt.take(5) 

[(u'2011-07-12 '(36.786290322580648, 22.0)) (u'2011-07-12'(36.786290322580648, 14.0)) (u'2011-07-12 ], (36.786290322580648, 8.0)), (u'2011-07-12 ', (36.786290322580648, 6.0))]

답변

0

내부 튜플 true_vs_predicted_dt = actual.zip (preds)에서 작성됩니다. zip 함수는 튜플 목록과 함께 나타납니다.

당신은 이

테스트되지 않은 코드 당신이 Tuple3

에 Tuple2를 매핑 할 수 있습니다 현재 구조를 유지하려면 (스칼라 - 쉽게 파이썬로 번역 할 수 있습니다) : 답장을 보내

val tmp = true_vs_predicted_dt.map(item => (item._1, item._2._1, item._2._2)) 
+0

덕분에, 내가 시도를하여 이 코드가 포함 된 솔루션 tmp = date.map (lambda x : (x, 실제, preds)) 하지만 아래 오류 메시지가 나타납니다. 예외 : 작업 또는 변환에서 RDD를 브로드 캐스트하거나 RDD를 참조하려고 시도하는 것으로 보입니다. RDD 변환 및 동작은 드라이버에 의해서만 호출 될 수 있고 다른 변환에서는 호출되지 않을 수 있습니다. 예를 들어 rdd1.map (lambda x : rdd2.values.count() * x) 값은 rdd1.map 변환 내부에서 값 변환 및 개수 작업을 수행 할 수 없기 때문에 유효하지 않습니다. –

관련 문제