2014-10-07 3 views
1

""섹션을 참조하십시오. 자바 섹션.Spark Java : 함수에 가변 인수 인수 전달

예제가 작동합니다. 하지만이 특정 코드 스 니펫에 대한 질문이 있습니다.

JavaRDD<Row> rowRDD = people.map(
new Function<String, Row>() { 
public Row call(String record) throws Exception { 
String[] fields = record.split(","); 
    return Row.create(fields[0], fields[1].trim()); 
} 

행 작성 메소드가 컴파일시 결정된 정적 오브젝트 수와 함께 호출 중입니다.

그러나 내 코드에서 동적 번호 인수에 대해서는 Row.create 메서드를 호출해야합니다.

return Row.create(fields[0], fields[1].trim(), fields[2]);

또는

return Row.create(fields[0]); 

또는

return Row.create(fields[0],fields[1].trim(), fields[2], fields[3],fields[4]); 
:

나는 단지 예를 들어

, 그것은 중 하나가 될 수 있습니다 런타임에 필드의 수를 알 수

어떻게해야합니까?

+0

일부 사람들은 "인수 후 3 개의 점"이 내 문제를 해결할 것이라고 제안했습니다. 그것은 실 거예요. 메서드를 호출하는 이미 동적 인수 수락합니다. 문제는 전화하는 것입니다. 나는 컴파일시에 얼마나 많은 인수가 전달되는지 알지 못한다. 나는 그것을 런타임에 알 것이다. 문제는 기능이 아닙니다. – Sit

답변

0

다음과 같이 구현 된 방법으로 elipsis를 사용해보세요.

public static void create(String ...arg) { ... } 

Elipsis accept n 인수의 수.

0

당신은 예를 들어, 인수 후 3 점을 사용하여 여러 인수를 사용하는 방법을 지정할 수 있습니다

public static <return_type> create(String...args){ 
    // Yoo can now use the String[] args 
} 

이 원하는 반환 형식으로 를 교체합니다. 반품 종류를 지정하지 않았으므로 방법으로 서명을 변경하십시오! 여기

0

내가

new Function<String, Row>(String s) { 
    public Row call(String s){ 
     int n = /* width of actual schema */ 
     Object rec[] = new Object[n]; 
     for(int i = 0; i < n; ++i) 
      rec[i] = /* Something that aligns with the type of #i field */ 
     return Row.create(rec); 
    } 
} 

가있을 수 있습니다 용 여기에 같은 상황에서 한 것입니다. 내 버전이 컴파일되고 잘 보이지만 아직 테스트되지 않았습니다.

1

다음은 수행 방법입니다. 나를 위해 일했다.

JavaRDD<Row> rowRDD = people.map(
    new Function<String, Row>() { 
    public Row call(String record) throws Exception { 
    String[] fields = record.split(",");   
    //return Row.create(fields[0], fields[1].trim()); 
     Object[] fields_converted = fields; 
     return Row.create(fields_converted); 
     } 
     });