2014-06-18 4 views
1

에 내 데이터의 형식은는 PySpark

UserId\tItemId:Score,ItemId:Score 
UserId\tItemId:Score,ItemId:Score,ItemId:Score 

등등 ..

내가 평균을 뺀 표준 편차로 나누어 점수를 정상화하기 위해 노력하고있다 집계. S3에 약 300 개의 파일 또는 30MB의 데이터가 있습니다. PySpark를 사용하고 있습니다. 이 내 시도입니다 :

lines = sc.textFile("s3n://data-files/clustering") 

Itr1 = lines.map(lambda x:str(x)) 

Itr1.take(3) 

['1\t1:0.1,2:0.2', '2\t3:0.4,4:0.6', '3\t5:0.8,6:0.1'] 


Itr2 = Itr1.map(lambda x: x.split("\t")) 

Itr2.take(3) 

[['1', '1:0.1,2:0.2'], ['2', '3:0.4,4:0.6'], ['3', '5:0.8,6:0.1']] 

ItemRecScore = Itr2.map(lambda x:[x[1]]) 

ItemRecScore.take(3) 

[['1:0.1,2:0.2'], ['3:0.4,4:0.6'], ['5:0.8,6:0.1']] 

ItemRecScoreClean = ItemRecScore.map(lambda x: x[0].replace(':',' ')) 

ItemRecScore.take(3) 

['1 0.1,2 0.2', '3 0.4,4 0.6', '5 0.8,6 0.1'] 

1) 내가 mean()stdev()이 매개 변수를 계산하기 위해,시 호출 할 수 있도록 난 그냥 점수를 추출하려면 어떻게합니까.

2) 점수를 어떻게 변환합니까?

필자는 PySpark를 처음 사용하기 때문에 분명한 직설적 인 작업 인 경우 사과드립니다. PySpark에서 데이터를 조작하고 집계하는 방법을 보여주는 지시 사항이나 자습서가 도움이 될 것입니다. 당신이 입력의 각 행에 대해 여러 점수를 가지고 있기 때문에

+0

일반적인 Python 프로그램에서이 문자열의 점수를 어떻게 분석합니까? –

답변

0

, 우리는 & 점수를 각 라인에서 itemids을 모두 추출하고 각 요소 항목 & 점수 값 중 하나입니다 RDD을 다시 얻을 수 flatMap를 사용할 수 있습니다. 거기에서 우리는 단지 점수를 추출하고 그것을 플로트로 변환 할 수 있기 때문에 PySpark의 수치 적 방법이 그것에 작용할 수 있습니다. 이렇게하면 RDD에서 stats()를 호출하여 관심있는 정보를 얻을 수 있습니다.

inputData = sc.textFile(inputFile) 
idScores = inputData.flatMap(lambda x: x.split("\t")[1].split(",")) 
scores = idScores.map(lambda x: float(x.split(":")[1])) 
print scores.stats()