2016-10-04 6 views
1

나중에 편집 : Apache Zeppelin 인터프리터와 관련된 문제인 것 같습니다. Spark 1.6.0에서 Apache Zeppelin 0.6.0을 사용하고 있습니다. spark-shell (2.0.0)에서 같은 코드를 실행할 때 아무런 문제가 없었습니다.Apache Zeppelin에서 udf를 적용 할 때 클래스를 찾을 수 없음

이것은 너무 구체적 일지 모르지만 UDF로 유사한 오류가 발생하는 다른 사람들을 도울 수 있습니다.

내가 원하는 것은 해당 DF의 다른 열과 문자열의 Seq를 기반으로 Spark Dataframe에 열을 만드는 것입니다. 따라서 "도시"열을 만들고 "위치"열의 값이 0 인 다른 도시 "도시"에 있으면 1을 입력하십시오.

여러 가지 방법으로 시도해 보았습니다. 같은 오류가 발생합니다. 최종 버전은 다음 게시물을 기반으로합니다. Use of Seq.contains(String)Create new column with udf. 이것은 내가 지금 무엇을 가지고 : 내가 받기를 실행하면

val cities = Seq("london", "paris") 
df.filter(lower($"location") isin (cities : _*)).count() 

긴 5485947 그래서 내가 그 2 곳

import org.apache.spark.sql.functions._ 
val urbanFlag: (String => Int) = (arg: String) => {if (cities.contains(arg)) 1 else 0} 
val urbf = udf(urbanFlag) 
df.withColumn("urban", urbf(lower($"location"))).show(100) 

와 기록이 = "작업으로 인해 무대 장애로 중단"오류 :

java.lang.ClassNotFoundException: $iwC$$iwC$$iwC$$iwC$$iwC$$$$725d9ae18728ec9520b65ad133e3b55$$$$$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$1

... 거대한 스택 추적. 익명 함수에 대해 뭔가있는 것 같아요?

+0

'$ iwC $'는 repl의 코드 클래스 패스입니다. 나는 당신이 repl에서 udfs를 사용할 수 없다고 생각합니다. – Reactormonk

+0

당신이 옳다고 생각합니다. 코드를 스파크 쉘로 옮겼습니다. Apache Zeppelin에서 udfs를 올바르게 사용하지 않았을 수 있습니다. – UrVal

답변

1

아마도 UDF를 정의하는 방식에 문제가 있습니까? 이 작품은 나를 위해 :

import org.apache.spark.sql.functions._ 

val data = sqlContext.read.json(sc.parallelize(Seq("{'location' : 'london'}", "{'location': 'tokyo'}"))) 

val cities = Seq("london", "paris") 
val urbf = udf { city: String => if (cities.contains(city)) 1 else 0 } 

data.select($"location", urbf($"location")).show 

+--------+-------------+ 
|location|UDF(location)| 
+--------+-------------+ 
| london|   1| 
| tokyo|   0| 
+--------+-------------+ 

나는 중급없이 직접 UDF를 정의하고있다.

+0

내 편에서는 같은 오류가 발생하지 않습니다. 나는 또한 코드를 복사하여 Zeppelin 셀에서 실행했습니다. 동일한 오류가 발생했습니다. Spark의 어떤 버전을 사용합니까? 광산은 CDH 5.7.0 배포의 일부로 1.6.0입니다. – UrVal

+0

spark-shell 2.0.0에서 코드를 사용해 보았습니다. 나는 또한 내가 쓴 것을 시도했고 그것은 또한 효과가 있었다. 이것은 Apache Zeppelin 인터프리터와 관련된 문제입니다. – UrVal

+1

@UrVal 아파치 Zeppelin 문제를 나타 내기 위해 질문을 변경해야합니다. 일반적인 문제가 아닙니다. 불꽃 문제 –

관련 문제