我正在阅读文本文件并实现字数统计示例。问题是我得到一个带空键的RDD。
这是代码:
val tokens = sc.textFile("test.txt").flatMap(line => line.split(",")).map(_.trim)
val tableForFrequency = tokens.map(word => (word, 1))
.reduceByKey((a, b) => a + b)
tableForFrequency.saveAsTextFile("file.txt")
我不知道为什么我要空了,我该怎么删除它。
请注意:我是Scala / Spark的新手,在发布此内容之前已经查找了相关问题。
答案 0 :(得分:3)
让我们考虑以下示例:
val data = Seq(" ","w","w2","")
// data: Seq[String] = List(" ", w, w2, "")
val tokens = sc.parallelize(data).flatMap(line => line.split(",")).map(_.trim)
// tokens: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[9] at map at <console>:29
你需要在triming后过滤掉长度为0的字符串:
val tableForFrequency = tokens.filter(_.length > 0).map(word => (word, 1)).reduceByKey(_ + _)
// tableForFrequency: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[13] at reduceByKey at <console>:31
tableForFrequency.collect
// res4: Array[(String, Int)] = Array((w2,1), (w,1))
答案 1 :(得分:0)
您的filter
功能可能会像您需要的那样复杂或简单。
在过滤器函数中,只需编写逻辑,为非空行返回True
,为 空的字符串返回False
。而且,就字符串而言,empty
是另一种表达length == 0
伪码:
.filter( string.length != 0 )