2016-06-12 4 views
0

R에서 1 : 10000 데이터를 생성했습니다. SparkR을 사용하여 1 : 10000 데이터로 RDD를 만들었습니다. SparkR을 사용하여 데이터 < 10을 인쇄하도록 필터링하려고합니다. 나는 SparkR을 배우고 있으며 어떤 도움을 주셔서 감사합니다. 중복으로 표시하기 전에이 질문을주의 깊게 읽으십시오. 마지막에는 데이터 프레임 작업을 좋아하는 사람들을위한 코드도 제공했습니다.sparkR 데이터 프레임에없는 데이터 필터링

library(SparkR) 
sc <- sparkR.init(master = "local") 
sqlContext <- sparkRSQL.init(sc) 
Data <- c(1:10000) 
distData <- SparkR:::parallelize(sc,Data) 

은 내가 답을 얻기 위해 다음과 같은 방법 시도 < (10) 모든 데이터를 출력합니다. 불행히도, 나는 각각의 오류가 발생합니다. 문제는 병렬화 기능이 아닙니다. 나는 필터와 문제를 직면하고 기능을 수집합니다. 자세한 내용은 내가 실행 한 다른 시도와 관련 오류를 참조하십시오.

SparkR:::filter(distData[distData < 10]) 

Error: Error in SparkR:::filter(distData[distData < 10]) : 
error in evaluating the argument 'x' in selecting a method for function  'filter': Error in distData[distData < 10] : 
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 : 
comparison (3) is possible only for atomic and list types 

SparkR:::filter(sc,distData[distData < 10]) 

Error in SparkR:::filter(sc, distData[distData < 10]) : 
error in evaluating the argument 'condition' in selecting a method for function 'filter': Error in distData[distData < 10] : 
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 : 
comparison (3) is possible only for atomic and list types 

SparkR:::collect(distData,filter(distData[distData<10])) 

Error in filter(distData[distData < 10]) : 
error in evaluating the argument 'x' in selecting a method for function 'filter': Error in distData[distData < 10] : 
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 : 
comparison (3) is possible only for atomic and list types 


SparkR:::collect(distData, function(dist){ 
    print(dist[dist<10]) 
}) 

Error in if (flatten) { : argument is not interpretable as logical 


filter(distData, function(dist){ 
    print(dist[dist<10]) 
}) 

Error in (function (classes, fdef, mtable) : 
unable to find an inherited method for function ‘filter’ for signature ‘"RDD", "function"’ 

다음

내가 데이터 프레임 작업

df <- SparkR:::createDataFrame(sqlContext,distData) 
colnames(df)<-c("random") 
df1<-subset(df, nana$random<10) 
SparkR:::collect(df1) 
+0

나는'sparkR'에 대해별로 좋아하지 않지만, 왜 당신이 개인적인 기분을 사용하고 있는지 배우고 있다면 (':::'에 의해 숨겨진)? 필자는 ['filter'] (https://spark.apache.org/docs/1.6.0/api/R/filter.html) 함수를 사용할 것이지만 데이터를 긴 형식으로 저장해야합니다. – agstudy

+1

그것은 여전히 ​​중복입니다. 당신은 (다른 질문에 대한 답으로) 비추천적이고 의도적으로 숨겨진 기능을 사용하려고합니다. 대답은 다른 대답의 리소스를 사용하거나 더 이상 사용되지 않는 RDD 인터페이스를 사용하지 않는 것입니다. – hrbrmstr

+0

제 질문을 신중하게 읽으면 이해할 수 있습니다. 나는 여기서 아무것도 정당화하지 않을 것이다. 나는 R을 사용하는 것을 안다. 필터링 과정은 보통 R에서 두 단계로 수행 될 수있다. 나는 "개인 함수"를 사용하여 sparkR을 탐색한다. sparkR은 벡터를 처리 할 수 ​​없다고 생각합니다. 데이터 프레임 형식 인 경우에만 데이터를 처리 할 수 ​​있습니다. sparkR의 많은 고급 사용자가 있으므로 잘못하면 수정하십시오. – Samarth

답변

0

SparkR은 스파크 DataFrames 작업, 오직 하나 개의 컬럼으로 DataFrames 스파크 목록에없는 명령을 경우 작동하는 코드입니다. distData가 1 열의 DataFrame 인 반면 filter() 구문은 사용자가 목록에서 작업하고 있다고 가정합니다. 오류가있는 예제의 filter() 명령에서 열 이름을 지정해야합니다. str(distData)을 실행하여 열 이름을 확인하십시오. 그런 다음 distData$colName < 10

을 사용하여 필터를 적용하십시오. subset(), sql 및 filter() 함수를 사용하여 Spark DataFrame을 필터링하는 방법의 예는 this question의 답변에서 사용할 수 있습니다. @ zero323은 필터 함수의 작동 구문을 설명하는 질문에 대답했습니다.