Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
如何在scala spark rdd中提取CSV文件列_Scala_Apache Spark - Fatal编程技术网

如何在scala spark rdd中提取CSV文件列

如何在scala spark rdd中提取CSV文件列,scala,apache-spark,Scala,Apache Spark,假设这些是我的CSV文件: 21628000000;21650466094 21697098269;21653506459 21653000000;21624124815 21624124815;21650466094 21650466094;21650466094 21624124815;21697098269 21697098269;21628206459 21628000000;21624124815 21650466094;21628206459 21628000000;21628206

假设这些是我的CSV文件:

21628000000;21650466094
21697098269;21653506459
21653000000;21624124815
21624124815;21650466094
21650466094;21650466094
21624124815;21697098269
21697098269;21628206459
21628000000;21624124815
21650466094;21628206459
21628000000;21628206459
我想计算第一列中出现的次数以得出结果:

(21628000000,4)
(21697098269,2)
(21624124815,2)
(21650466094,2)
我试过:

object CountOcc {
  def main(args: Array[String]) {
    val conf = new SparkConf()
    .setAppName("Word Count")
    .setMaster("local")

    val sc = new SparkContext(conf)

    //loading text file into textFile object .(RDD)
    val textFile = sc.textFile(args(0))

   //read the line , split the line into words
    val words = textFile.flatMap (line => line.split(";"))
    val cols = words.map(_.trim)
    println(s"${cols(0)}") //error
    cols.foreach(println)
   sc.stop()

  }
}
我得到一个错误,org.apache.spark.rdd.rdd错误[String]不带参数

因此,我无法生成cols(0)或cols(1),我如何只能得到第一列以便计算发生率?

试试看

val words = textFile.map (line => line.split(";")(0)).map(p=>(p,1)).reduceByKey(_+_).collect()
试一试

我试着

我得到:

2
1
6
5
0
4
6
6
0
9
4
2
1
6
5
3
5
0
6
4
5
9
2
1
6.....
我试着

我得到:

2
1
6
5
0
4
6
6
0
9
4
2
1
6
5
3
5
0
6
4
5
9
2
1
6.....

此scala作业将正确打印CSV文件的第一列

import org.apache.spark.sql.SparkSession

object CountOcc {
  def main(args: Array[String]) {
    val spark = SparkSession.builder()
      .appName("Read CSV")
      .getOrCreate()

    val csvDF = spark.read.csv(args(0))

    val firstColumnList = csvDF.map( x => x.getString(0))

    firstColumnList.foreach(println(_))

    spark.close
  }
}

希望对您有所帮助

此scala作业可以正确打印CSV文件的第一列

import org.apache.spark.sql.SparkSession

object CountOcc {
  def main(args: Array[String]) {
    val spark = SparkSession.builder()
      .appName("Read CSV")
      .getOrCreate()

    val csvDF = spark.read.csv(args(0))

    val firstColumnList = csvDF.map( x => x.getString(0))

    firstColumnList.foreach(println(_))

    spark.close
  }
}

希望能有所帮助

是的。我真蠢,应该是地图而不是平面地图。我根据我得到这个输出的原因进行了编辑,但当我绘制地图时,它工作得很好。我真蠢,应该是地图而不是平面地图。我根据为什么我得到这个输出进行了编辑,但当我做了映射,它工作的很好,我改变了。flatMap=>map和行拆分为0很高兴能提供帮助:)我已更改。flatMap=>map和行拆分为0很高兴能提供帮助:)