내가지도 내부 필터를()()를 사용하려고하지만 난이 스파크 예외가 :스파크 예외지도에서 필터를()()를 사용할 때
RDD 변환과 행동 드라이버 만 호출 할 수
다른 변형의 내부가 아닙니다. 예를 들어 rdd1.map (x => rdd2.values.count() * x)은 rdd1.map 변환에서 값 변환 및 개수 작업을 수행 할 수 없기 때문에 유효하지 않습니다. 자세한 내용은 SPARK-5063을 참조하십시오.
아니라 내가 그 튜플은 RDD이다, 나는 그 불꽃이 중첩 변환/액션/RDDs을 허용하지 않습니다 알고, 그래서 어떤 사람은 나에게 (중첩 변환이나 행동하지 않고) 다른 방법을 수행하는 방법 제안을 제공 할 수 있습니다 같은 :
내가 인수로 그것을 목록을주고, 그것을 매핑 할JavaRDD< String[]> RDD
이이 목록은 javaPairRDDs 포함
List<JavaPairRDD<String,String>> list
JavaRDD< String[]> result = RDD.map(new modifyRDD(list));
이 라인은 modifyRDD을 의미한다() 함수 :
public static class modifyRDD implements Function <String[], String[]> {
List<JavaPairRDD<String,String>> list;
public modifyRDD (List<JavaPairRDD<String,String>> list){ this.list=list;}
public String [] call(String[] t) {
String[] s = t;
for (int i = 0; i < NB_TD; i++) {
int j=i;
// select the appropriate RDD from the RDDs_list to the current index
JavaPairRDD<String,String> rdd_i = list.get(i);
String previousElement=s[j];
JavaPairRDD<String,String> currentRDD = rdd_i.filter(line -> line._1().equals(previousElement));
String newElement=currentRDD.first()._2();
s[j]=newElement;
}
return (s) ;
}
}
때문에, 문제가
JavaPairRDD<String,String> currentRDD = rdd_i.filter(line -> line._1().equals(previousElement));
지금 내가 예를 들어 줄이 라인에, 그 목록은 내가 포함 매핑 할 2 PairRDDs
list={PairRDD1={(a,b)(c,d)},PairRDD2={(u,v)(x,y)}..}
내 RDD 포함되어있는 경우를 가정 해 봅시다 :
JavaRDD< String[]> RDD = {[a,u],[c,x],[a,x].....}
내가 원하는 결과는 map()입니다.
JavaRDD< String[]> result = {[b,v],[d,y],[b,y].....}
당신이 오류 메시지와 해당 JIRA를 읽게한다? 스파크는 중첩 된 RDD를 지원하지 않는 것처럼 중첩 된 액션과 변형을 지원하지 않습니다. – zero323
예,하지만 대체 솔루션으로 무엇을 할 수 있습니까 – ham
이 문제는 너무 많은 시간이 너무에 적용되었습니다 ... 짧은 대답 : a) RDD 작은 수집 및 지역 변수 또는 방송을 사용 b) RDD 큰 표현이 문제가 조인으로 – zero323