使用Spark Scala将列名,不同值及其出现次数添加到文本文件中

时间:2017-11-21 16:28:27

标签: scala apache-spark

我是Spark Scala的新手,想要执行以下任务:

  1. 从表格中获取所有列名称,值及其出现次数
  2. 将结果写入文本文件,即采用以下格式:

    Column Name |Value | Occurrences    
       Col1     |Test  |      12       
       Col2     |123   |      15
    
  3. 我使用的是Spark 1.6,而不是Spark 2.0。

    非常感谢您提供任何帮助。

    干杯, 的Matthias

1 个答案:

答案 0 :(得分:0)

希望这会对你有所帮助。 让我用一个例子来解释。

我有一个文件,users.txt,内容如下:

1 abc@test.com EN US

2 xyz@test2.com EN GB

3 srt@test3.com FR FR

代码:

var fileRDD=sc.textFile("users.txt")    
case class User(ID:Int,email:String,lang:String,country:String)
var rawRDD=fileRDD.flatMap(_.split("\t")).map(_.split(" ")) 
var userRDD=rawRDD.map(u=>User(u(0).toInt,u(1).toString,u(2).toString,u(3).toString))
userDF.registerTempTable("user_table")

sqlContext.sql("select * from user_table").show()

+---+-------------+----+-------+    
| ID|        email|lang|country|    
+---+-------------+----+-------+    
|  1| abc@test.com|  EN|     US|    
|  2|xyz@test2.com|  EN|     GB|    
|  3|srt@test3.com|  FR|     FR|    
+---+-------------+----+-------+


var emailCount=sqlContext.sql("select 'email' as col,email as value, count(email) as occur from user_table group by email")     
var langCount=sqlContext.sql("select 'lang' as col,lang as value, count(lang) as occur from user_table group by lang")    
emailCount.unionAll(langCount).show()


+-----+-------------+-----+    
|  col|        value|occur|    
+-----+-------------+-----+    
|email|srt@test3.com|    1|    
|email|xyz@test2.com|    1|    
|email| abc@test.com|    1|    
| lang|           EN|    2|    
| lang|           FR|    1|    
+-----+-------------+-----+