Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/forms/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在SparkContext中调用现有Java/Hive UDF,而不在Spark SQL应用程序中使用HiveContext_Scala_Apache Spark Sql_Spark Dataframe_Esri_Hive Udf - Fatal编程技术网

Scala 在SparkContext中调用现有Java/Hive UDF,而不在Spark SQL应用程序中使用HiveContext

Scala 在SparkContext中调用现有Java/Hive UDF,而不在Spark SQL应用程序中使用HiveContext,scala,apache-spark-sql,spark-dataframe,esri,hive-udf,Scala,Apache Spark Sql,Spark Dataframe,Esri,Hive Udf,我在集群上运行了Spark 1.5.0。我想使用ESRI API中的Hive UDF。我可以在Spark应用程序中使用这些API,但由于集群中的一些问题,我无法使用HiveContext。我想在Spark SQL应用程序中使用现有的配置单元UDF // val sqlContext = new SQLContext(sc) // import sqlContext.implicits._ // val hc = new HiveContext(sc) // hc.sql(

我在集群上运行了Spark 1.5.0。我想使用ESRI API中的Hive UDF。我可以在Spark应用程序中使用这些API,但由于集群中的一些问题,我无法使用HiveContext。我想在Spark SQL应用程序中使用现有的配置单元UDF

//    val sqlContext = new SQLContext(sc)
//    import sqlContext.implicits._
//    val hc = new HiveContext(sc)
//    hc.sql("create temporary function ST_Point as 'com.esri.hadoop.hive.ST_Point'")
//    hc.sql("create temporary function ST_Within as 'com.esri.hadoop.hive.ST_Within'")
//    hc.sql("create temporary function ST_Polygon as 'com.esri.hadoop.hive.ST_Polygon'")
//    val resultDF = hc.sql("select ST_Within(ST_Point(2, 3), ST_Polygon(1,1, 1,4, 4,4, 4,1))")
上面的代码是针对HiveContext的,但我想在SparkContext中使用类似的东西,所以按照-

但我似乎也犯了同样的错误。(见下文)

我试图用现有的UDF生成函数,但似乎需要生成scala包装器来调用java类。我试了如下-

def ST_Point_Spark = new ST_Point()
sqlContext.udf.register("ST_Point_Spark", ST_Point_Spark _)
def ST_Within_Spark = new ST_Within()
sqlContext.udf.register("ST_Within_Spark", ST_Within_Spark _)
def ST_Polygon_Spark = new ST_Polygon()
sqlContext.udf.register("ST_Polygon_Spark", ST_Polygon_Spark _)   
sqlContext.sql("select ST_Within_Spark(ST_Point_Spark(2, 3), ST_Polygon_Spark(1,1, 1,4, 4,4, 4,1))")  
但在这种情况下会出现错误-

Exception in thread "main" scala.reflect.internal.Symbols$CyclicReference: illegal cyclic reference involving object InterfaceAudience
    at scala.reflect.internal.Symbols$Symbol$$anonfun$info$3.apply(Symbols.scala:1220)
    at scala.reflect.internal.Symbols$Symbol$$anonfun$info$3.apply(Symbols.scala:1218)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
我只是想知道,有没有办法不用HiveContext直接使用SqlContext调用Hive/JavaUDF。 注:这是一个有用的帖子,但不是按照我的要求

def ST_Point_Spark = new ST_Point()
sqlContext.udf.register("ST_Point_Spark", ST_Point_Spark _)
def ST_Within_Spark = new ST_Within()
sqlContext.udf.register("ST_Within_Spark", ST_Within_Spark _)
def ST_Polygon_Spark = new ST_Polygon()
sqlContext.udf.register("ST_Polygon_Spark", ST_Polygon_Spark _)   
sqlContext.sql("select ST_Within_Spark(ST_Point_Spark(2, 3), ST_Polygon_Spark(1,1, 1,4, 4,4, 4,1))")  
Exception in thread "main" scala.reflect.internal.Symbols$CyclicReference: illegal cyclic reference involving object InterfaceAudience
    at scala.reflect.internal.Symbols$Symbol$$anonfun$info$3.apply(Symbols.scala:1220)
    at scala.reflect.internal.Symbols$Symbol$$anonfun$info$3.apply(Symbols.scala:1218)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)