从spark UDF返回java.util.Map导致scala.MatchError:{}(类java.util.HashMap)

时间:2018-02-09 12:41:05

标签: apache-spark apache-spark-sql apache-spark-dataset

我是Apache Spark的新手,我正在学习如何在java中使用它。我想定义和使用用户定义的函数(udf),并通过返回java.util.HashMap来获取scala.MatchError。

这是我的代码,用于从推文数据集中提取主题标签,并添加一个新列,其中包含主题标签的映射及其在相应推文中的出现次数:

    // Open spark session
    SparkSession sparkSession = SparkSession.builder().master("local[*]").appName("TwitterAnalyticsExample").getOrCreate();

    // Load training data
    Dataset<Row> twitterData = sparkSession.read().format("json").load(inputFilePath);

        UDF1 extractHashtags = new UDF1<String, Map<String, Integer>>() {

        @Override
        public Map<String, Integer> call(String tweet) throws Exception {
            Map<String, Integer> result = new HashMap<>();
            Pattern pattern = Pattern.compile("#\\w*");
            Matcher matcher = pattern.matcher(tweet);
            while (matcher.find()) {
                result.merge(matcher.group(), 1, (v1, v2) -> v1 + v2);
            }
            return result;
        }
    };


    sparkSession.sqlContext().udf().register("extractHashtags", extractHashtags, DataTypes.StringType);

    twitterData.limit(50).select(callUDF("extractHashtags", col("text"))).show(20);

以及以下导入:

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.api.java.UDF1;
import org.apache.spark.sql.types.DataTypes;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

任何提示,我做错了什么?返回类型java.util.Map是UDF的问题吗?我可以用什么呢?

0 个答案:

没有答案