在Scala中注册配置单元udf-java.net.MalformedURLException:未知协议:s3

时间:2018-11-28 13:37:08

标签: scala apache-spark hive

我正在尝试像这样在Scala Spark中注册udf,其中在蜂巢create temporary function udf_parallax as 'com.abc.edw.hww.etl.udf.parallax.ParallaxHiveHash' USING JAR 's3://bx-analytics-softwares/gdpr_hive_udfs/gdpr-hive-udfs-hadoop.jar'中注册以下udf可以正常工作

val sparkSess = SparkSession.builder()
  .appName("Opens")
  .enableHiveSupport()
  .config("set hive.exec.dynamic.partition.mode", "nonstrict").getOrCreate()
sparkSess.sql("""create temporary function udf_parallax as 'com.abc.edw.hww.etl.udf.parallax.ParallaxHiveHash' USING JAR 's3://bx-analytics-softwares/gdpr_hive_udfs/gdpr-hive-udfs-hadoop.jar'""");

我说错了 Exception in thread "main" java.net.MalformedURLException: unknown protocol: s3

想知道是否必须在config或其他任何东西中进行设置,我才刚刚开始学习。

对此有任何帮助。

1 个答案:

答案 0 :(得分:0)

为什么不将此 gdpr-hive-udfs-hadoop.jar 作为外部jar添加到您的项目中,然后执行此操作以注册udf:

val sqlContext = sparkSess.sqlContext
val udf_parallax = sqlContext.udf .register("udf_parallax", com.abc.edw.hww.etl.udf.parallax.ParallaxHiveHash _)

更新

1。如果您的配置单元正在远程服务器上运行:

  val sparkSession= SparkSession.builder()
                        .appName("Opens")
                        .config("hive.metastore.uris", "thrift://METASTORE:9083")
                        .config("set hive.exec.dynamic.partition.mode", "nonstrict")
                        .enableHiveSupport()
                        .getOrCreate()

sparkSession.sql("""create temporary function udf_parallax as 'com.abc.edw.hww.etl.udf.parallax.ParallaxHiveHash' USING JAR 's3://bx-analytics-softwares/gdpr_hive_udfs/gdpr-hive-udfs-hadoop.jar'""");

2。如果配置单元未在远程服务器上运行:

hive-site.xml 从您的 / hive / conf / 目录复制到 / spark / conf / 目录并创建<您在问题

中提到的strong> SparkSession