1
나는 다음과 같은 코드를 사용하여 Databricks 커뮤니티 에디션에서 테이블을 등록하려고 :오버로드 방법 값 UDF는
overloaded method value udf with alternatives:
나는 다음과 같은 코드를 사용하여 Databricks 커뮤니티 에디션에서 테이블을 등록하려고 :오버로드 방법 값 UDF는
overloaded method value udf with alternatives:
귀하의 UDF 구문 외모 : 그러나
import org.apache.spark.sql.functions.udf
val getDataUDF(url: String):Unit = udf(getData(url: String):Unit)
을, 오류가 발생합니다 조금 이상하다. getData()
을 호출 할 때 타입을 정의하면 안된다. 추가로, UDF에 대한 입력은 메소드 자체 내에 있어야합니다.
는 예를 들어, 다음과 같은 방법 getData
이 (가 리턴 값을 가져야한다) :
재 작성 :
def getData(url: String): String = {...}
는 UDF로하려면 두 가지 방법이 있습니다 getData
함수로서
val getData: (String => String) = {...}
val getDataUDF = udf(getData)
를 호출UDF를
val getDataUDF = udf((url: String) => {
getData(url)
})
다음과 같은 방법으로 모두 개인적으로 나는 방법 (1)가 조금 더 생겼다고 생각 작동합니다 내부 7,373,방법.
방법 1에서 'val getData'를 정의하는 것이 좋습니다 (즉 함수 정의). 당신이하는 일은 함수를 반환하는 메소드를 정의하는 것입니다. 하지만이 함수는 항상 동일하므로 내 의견으로는 def를 사용할 필요가 없습니다. –
@RaphaelRoth 이것이 유효한 포인트입니다. 나는 이것을 반영하기 위해 대답을 바꾸었다. – Shaido
감사합니다. 하지만 ... 내가 가진 문제는 등록시와 같은 서명을 사용할 수 없다는 것입니다. unit = udf (getData (_ : String) : Unit) 그러나 해결 된 사항은 getDataUDF (url : String) : unit = udf (getData (url : String) : Unit) 오류가 나는 예외를 얻고 있습니다 java.lang.UnsupportedOperationException : Unit 유형에 대한 스키마가 지원되지 않습니다. 지금은 연구 할 것입니다. 고맙다. – user3439308