Scala und Spark-UDF-Funktion

Habe ich ein einfaches UDF zu konvertieren oder zu extrahieren einige Werte aus einem Feld in ein temptabl in spark. Melde ich die Funktion aber wenn ich den Aufruf der Funktion mit sql wirft es eine NullPointerException. Unten ist meine Funktion und Ausführung. Ich bin mit dem Zeppelin. Pikanterweise lag dieser arbeiten war gestern, aber es gestoppt arbeiten an diesem morgen.

Funktion

def convert( time:String ) : String = {
  val sdf = new java.text.SimpleDateFormat("HH:mm")
  val time1 = sdf.parse(time)
  return sdf.format(time1)
}

Registrieren der Funktion

sqlContext.udf.register("convert",convert _)

Testen Sie die Funktion ohne SQL -- Dies funktioniert

convert(12:12:12) -> returns 12:12

Testen Sie die Funktion mit SQL im Zeppelin dieser AUSFÄLLT.

%sql
select convert(time) from temptable limit 10

Struktur der temptable

root
 |-- date: string (nullable = true)
 |-- time: string (nullable = true)
 |-- serverip: string (nullable = true)
 |-- request: string (nullable = true)
 |-- resource: string (nullable = true)
 |-- protocol: integer (nullable = true)
 |-- sourceip: string (nullable = true)

Teil der stacktrace, den ich erhalte.

java.lang.NullPointerException
    at org.apache.hadoop.hive.ql.exec.FunctionRegistry.getFunctionInfo(FunctionRegistry.java:643)
    at org.apache.hadoop.hive.ql.exec.FunctionRegistry.getFunctionInfo(FunctionRegistry.java:652)
    at org.apache.spark.sql.hive.HiveFunctionRegistry.lookupFunction(hiveUdfs.scala:54)
    at org.apache.spark.sql.hive.HiveContext$$anon$3.org$apache$spark$sql$catalyst$analysis$OverrideFunctionRegistry$$super$lookupFunction(HiveContext.scala:376)
    at org.apache.spark.sql.catalyst.analysis.OverrideFunctionRegistry$$anonfun$lookupFunction$2.apply(FunctionRegistry.scala:44)
    at org.apache.spark.sql.catalyst.analysis.OverrideFunctionRegistry$$anonfun$lookupFunction$2.apply(FunctionRegistry.scala:44)
    at scala.Option.getOrElse(Option.scala:120)
    at org.apache.spark.sql.catalyst.analysis.OverrideFunctionRegistry$class.lookupFunction(FunctionRegistry.scala:44)
InformationsquelleAutor fanbondi | 2016-07-28
Schreibe einen Kommentar