2017-12-04 21 views

답변

1

귀하의 UDF 구문 외모 : 그러나

import org.apache.spark.sql.functions.udf 

val getDataUDF(url: String):Unit = udf(getData(url: String):Unit) 

을, 오류가 발생합니다 조금 이상하다. getData()을 호출 할 때 타입을 정의하면 안된다. 추가로, UDF에 대한 입력은 메소드 자체 내에 있어야합니다.

는 예를 들어, 다음과 같은 방법 getData이 (가 리턴 값을 가져야한다) :

  1. 재 작성 :

    def getData(url: String): String = {...} 
    

    는 UDF로하려면 두 가지 방법이 있습니다 getData 함수로서

    val getData: (String => String) = {...} 
    val getDataUDF = udf(getData) 
    
  2. 를 호출UDF를

    val getDataUDF = udf((url: String) => { 
        getData(url) 
    }) 
    

다음과 같은 방법으로 모두 개인적으로 나는 방법 (1)가 조금 더 생겼다고 생각 작동합니다 내부 7,373,방법.

+1

방법 1에서 'val getData'를 정의하는 것이 좋습니다 (즉 함수 정의). 당신이하는 일은 함수를 반환하는 메소드를 정의하는 것입니다. 하지만이 함수는 항상 동일하므로 내 의견으로는 def를 사용할 필요가 없습니다. –

+0

@RaphaelRoth 이것이 유효한 포인트입니다. 나는 이것을 반영하기 위해 대답을 바꾸었다. – Shaido

+0

감사합니다. 하지만 ... 내가 가진 문제는 등록시와 같은 서명을 사용할 수 없다는 것입니다. unit = udf (getData (_ : String) : Unit) 그러나 해결 된 사항은 getDataUDF (url : String) : unit = udf (getData (url : String) : Unit) 오류가 나는 예외를 얻고 있습니다 java.lang.UnsupportedOperationException : Unit 유형에 대한 스키마가 지원되지 않습니다. 지금은 연구 할 것입니다. 고맙다. – user3439308