Java Spark UDF,输入参数为Map类型

时间:2018-12-21 07:24:53

标签: java apache-spark hadoop hive user-defined-functions

我的蜂巢表结构如下-

create table sessionize_data (
ip                  string                                      
cookie                  string                                      
userid                  string                                      
dattime                 string                                      
timestamp               bigint                                      
referrer                string                                      
request                 string                                      
useragent               string                                      
absoluteips             string                                      
xff                     string                                      
calltype                string                                      
url                     string                                      
unique_visitor          string                                      
referrer_url            string                                      
referrer_dqp            map<string,string>                          
dqp                     map<string,string>                          
params                  map<string,string>                          
events_subcategory      map<string,string>                          
session_id              string                                      
source                  string                                      
dwelltime               string                                      
traffic                 string                                      
viewdate                string );

现在,我想将spark UDF中的 param maps 列作为参数传递-我使用以下代码进行了操作-

spark.udf().register("populateUrl",
    new UDF3 < HashMap < String, String > , String, String, HashMap < String, String >> () {
        private static final long serialVersionUID = 1 L;
        @Override
        public HashMap < String, String > call(HashMap < String, String > params, String url_type, String source)
        throws Exception {
            // some operation here
            return params;
        }
    }, DataTypes.StringType);

当我使用上面的代码时,它为Map类型给出了类型错误。 有人可以建议如何构建接受地图类型列并返回地图类型列的 JAVA spark udf 。 谢谢。

1 个答案:

答案 0 :(得分:0)

根据_Spark SQL Programming GuideMapType的外部类型为java.util.Map,因此您应实现:

UDF3<java.util.Map<String, String>, String, String, java.util.Map<String, String>>