我是Scala的新手,想要从数据中删除标头。我有以下数据
recordid,income
1,50000000
2,50070000
3,50450000
5,50920000
我正在使用下面的代码来阅读
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object PAN {
def main(args: Array[String]) {
case class income(recordid : Int, income : Int)
val sc = new SparkContext(new SparkConf().setAppName("income").setMaster("local[2]"))
val income_data = sc.textFile("file:///home/user/Documents/income_info.txt").map(_.split(","))
val income_recs = income_data.map(r => (r(0).toInt, income(r(0).toInt, r(1).toInt)))
}
}
我想从对RDD
中删除标题,但不知道如何。
感谢。
===============================编辑=============== ==========================
我正在玩下面的代码
val header = income_data.first()
val a = income_data.filter(row => row != header)
a.foreach { println }
但它返回输出
[Ljava.lang.String;@1657737
[Ljava.lang.String;@75c5d3
[Ljava.lang.String;@ed63f
[Ljava.lang.String;@13f04a
[Ljava.lang.String;@1048c5d
答案 0 :(得分:0)
你通过过滤它来删除标题的技术将正常工作。问题是你是如何尝试打印数组的。
Scala中的数组不会覆盖toString
,因此当您尝试打印时,它使用默认的字符串表示形式,它只是名称和哈希码,通常不是很有用。
如果要打印数组,请先使用字符串上的mkString
方法将其转换为字符串,或使用foreach(println)
a.foreach {array => println(array.mkString("[",", ","]")}
或
a.foreach {array => array.foreach{println}}
是否会打印出数组中的元素,以便您可以看到它们包含的内容。
请记住,在使用Spark时,在转换和操作中打印只能在本地模式下工作。移动到集群后,工作将在远程执行程序上完成,因此您将无法查看和控制它们的输出。
答案 1 :(得分:0)
val income_data = sc.textFile("file:///home/user/Documents/income_info.txt")
income_data.collect().drop(1)
创建RDD时,它将返回RDD[String]
,然后在其上collect()
时将返回Array[String], drop(number of elements)
是Array顶部的函数,用于从其中删除许多行RDD。