Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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
在spark中使用JavaRDD添加文本文件的列_Java_Apache Spark - Fatal编程技术网

在spark中使用JavaRDD添加文本文件的列

在spark中使用JavaRDD添加文本文件的列,java,apache-spark,Java,Apache Spark,我是spark的新手。我试图读取一个文本文件,并总结第三列的总数。我有点困惑如何使用RDD public class test2 { public static void main(String[] args) { String logFile = "textfile.txt"; // Should be some file on your system JavaSparkContext sc = new JavaSparkContext("local", "Simpl

我是spark的新手。我试图读取一个文本文件,并总结第三列的总数。我有点困惑如何使用RDD

public class test2 {
  public static void main(String[] args) {
     String logFile = "textfile.txt"; // Should be some file on your system

     JavaSparkContext sc = new JavaSparkContext("local", "Simple App",
            "spark-0.9.1-bin-hadoop2/", new String[]{"test2_jar/test2.jar"});
     JavaRDD<String> logData = sc.textFile(logFile).cache();
     JavaRDD<String> tabbed = logData.flatMap(new FlatMapFunction<String, String>() {
        @Override
        public Iterable<String> call(String s) throws Exception {
            return Arrays.asList(s.split(","));
        }
     });
  }
}
公共类test2{
公共静态void main(字符串[]args){
字符串logFile=“textfile.txt”;//应该是系统上的某个文件
JavaSparkContext sc=新的JavaSparkContext(“本地”、“简单应用程序”,
“spark-0.9.1-bin-hadoop2/”,新字符串[]{“test2_-jar/test2.jar”});
JavaRDD logData=sc.textFile(logFile.cache();
JavaRDD tabbed=logData.flatMap(新的flatMap函数(){
@凌驾
公共Iterable调用(字符串s)引发异常{
返回数组.asList(s.split(“,”);
}
});
}
}

这就是我能做到的。如何让RDD在拆分第二列后访问它?我知道可以用fold求和。但我真的不知道怎么做

使用spark shell和scala更容易理解正在发生的事情,因为语法没有那么详细。然后,一旦您理解了流程,用Java编写它就容易多了

首先:flatMap将获取您的日志条目列表并将它们附加到RDD中,这样就不用像

A, B
C, D
您将以四行结束,如

A
B
C
D
要获得所需的行为,需要使用“map”函数

在spark shell中,代码如下所示:

val logData = sc.textFile("textfile.txt")
val tabbed = logData.map(x => x.split(","))
val secondColumn = tabbed.map(x => x(1).toDouble)
val sum = secondColumn.sum

非常感谢你,大卫!!如何将RDD的值打印出来以使其可视化?我一直使用take(m)或first()。这是正确的吗?