Scala Spark RDD映射问题
我有一个文本数据如下 no1 1|3|4 no2 4|5|6 第11 | 3 | 4号 第2 4 | 5 | 6号 我想使用spark RDD和scala语言对上述数据进行如下转换 no1 1 no1 3 no1 4 no2 4 no2 5 no2 6 11号 13号 14号 二氧化氮 二氧化氮 NO26Scala Spark RDD映射问题,scala,apache-spark,Scala,Apache Spark,我有一个文本数据如下 no1 1|3|4 no2 4|5|6 第11 | 3 | 4号 第2 4 | 5 | 6号 我想使用spark RDD和scala语言对上述数据进行如下转换 no1 1 no1 3 no1 4 no2 4 no2 5 no2 6 11号 13号 14号 二氧化氮 二氧化氮 NO26 我对Spark和Scala很陌生。我找不到任何这样的例子。我建议您以数据帧的形式读入该文件,在未来的spark版
我对Spark和Scala很陌生。我找不到任何这样的例子。我建议您以数据帧的形式读入该文件,在未来的spark版本中,其API将比RDD API更受重视。对于数据帧,您所要求的任务非常简单,具有
split
和explode
功能:
val df = Seq(("no1", "1|3|4"), ("no2", "4|5|6")).toDF("A", "B")
// df: org.apache.spark.sql.DataFrame = [A: string, B: string]
df.show
+---+-----+
| A| B|
+---+-----+
|no1|1|3|4|
|no2|4|5|6|
+---+-----+
df.withColumn("B", explode(split($"B", "\\|"))).show
+---+---+
| A| B|
+---+---+
|no1| 1|
|no1| 3|
|no1| 4|
|no2| 4|
|no2| 5|
|no2| 6|
+---+---+
我建议您以数据帧的形式读入该文件,在未来的spark版本中,其API将比RDDAPI更受重视。对于数据帧,您所要求的任务非常简单,具有
split
和explode
功能:
val df = Seq(("no1", "1|3|4"), ("no2", "4|5|6")).toDF("A", "B")
// df: org.apache.spark.sql.DataFrame = [A: string, B: string]
df.show
+---+-----+
| A| B|
+---+-----+
|no1|1|3|4|
|no2|4|5|6|
+---+-----+
df.withColumn("B", explode(split($"B", "\\|"))).show
+---+---+
| A| B|
+---+---+
|no1| 1|
|no1| 3|
|no1| 4|
|no2| 4|
|no2| 5|
|no2| 6|
+---+---+
我们可以读取文本文件并简单地为您的解决方案使用rdd转换
val rrd=spark.sparkContext.textFile("file_path").map(x=>x.split("\t")).map(x=>(x.head,x.last))
val trdd=rdd.map{case(k,v)=> v.split("\\|").map((k,_))}
trdd.collect.foreach(x=>x.foreach(x=>println(x._1+"\t"+x._2)))
o/p looks like
no1 1
no1 3
no1 4
no2 4
no2 5
no2 6
我们可以读取文本文件并简单地为您的解决方案使用rdd转换
val rrd=spark.sparkContext.textFile("file_path").map(x=>x.split("\t")).map(x=>(x.head,x.last))
val trdd=rdd.map{case(k,v)=> v.split("\\|").map((k,_))}
trdd.collect.foreach(x=>x.foreach(x=>println(x._1+"\t"+x._2)))
o/p looks like
no1 1
no1 3
no1 4
no2 4
no2 5
no2 6
谢谢你的评论。如果我有一个数据txt文件,想输入(不是手动输入),如何实现用户输入文件的命令?@sclee1学习Spark。我并不是在嘲笑你,只是你不能指望只从一系列的问题到一系列的问题来编写你的应用程序。任何Spark教程都将涵盖从文件中读取的内容。根据您的Spark版本,从文件中读取的内容将有所不同。对于spark 2+,我发现
spark.read.option(“header”,“true”).option(“inferSchema”,“true”).csv(您的文件)
非常方便使用。感谢您的评论。如果我有一个数据txt文件,想输入(不是手动输入),如何实现用户输入文件的命令?@sclee1学习Spark。我并不是在嘲笑你,只是你不能指望只从一系列的问题到一系列的问题来编写你的应用程序。任何Spark教程都将涵盖从文件中读取的内容。根据您的Spark版本,从文件中读取的内容将有所不同。对于spark 2+,我发现spark.read.option(“header”、“true”).option(“inferSchema”、“true”).csv(您的文件)
使用起来很方便。