java - 如何使用 Java 在 SPARK 中使用映射函数

标签 java csv apache-spark

我尝试在 spark 中读取一个 csv 文件,我想拆分以逗号分隔的行,以便我有一个带有二维数组的 RDD。我是 Spark 的新手。

我试着这样做:

public class SimpleApp 
{   
    public static void main(String[] args) throws Exception 
    {       
        String master = "local[2]";
        String csvInput = "/home/userName/Downloads/countrylist.csv";
        String csvOutput = "/home/userName/Downloads/countrylist";

        JavaSparkContext sc = new JavaSparkContext(master, "loadwholecsv", System.getenv("SPARK_HOME"), System.getenv("JARS"));

        JavaRDD<String> csvData = sc.textFile(csvInput, 1);
        JavaRDD<String> words = csvData.map(new Function <List<String>>() { //line 43
              @Override
              public List<String> call(String s) {
                return Arrays.asList(s.split("\\s*,\\s*"));
              }
            });

        words.saveAsTextFile(csvOutput);
    }
}

这应该拆分行并返回一个 ArrayList。但我不确定这一点。 我收到此错误:

SimpleApp.java:[43,58] wrong number of type arguments; required 2

最佳答案

所以这个程序有两个小问题。首先是你可能想要 flatMap 而不是 map,因为你试图返回单词的 RDD 而不是单词列表的 RDD,我们可以使用 flatMap 来展平结果。另一个是,我们的函数类还需要调用它的输入类型。我会将 JavaRDD 单词...替换为:

JavaRDD<String> words = rdd.flatMap(
  new FlatMapFunction<String, String>() { public Iterable<String> call(String s) {
      return Arrays.asList(s.split("\\s*,\\s*"));
    }});

关于java - 如何使用 Java 在 SPARK 中使用映射函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26817940/

相关文章:

java - 遍历 Java 字符串行的最佳方法是什么?

java - 从 hql 结果中选择单个对象

csv - 将未发布的Google电子表格下载为CSV

mysql - 重复键更新 MySQL 不更新

java - 运行约 1 小时后,Spark Streaming 作业被终止

java - 为什么spark不选择证书?

java - 为其他开发人员设计类以在 Java 中使用

java - 了解在 Tomcat 上部署的应用程序的 Spring 框架中使用 AspectJ 进行加载时编织

使用readr从cognos 8文件(utf 16)读入R数据帧

docker - 如何在Docker上设置Apache Spark和Zeppelin