我从csv文件加载了RDD
。但是,此文件包含无效数据。因此,当我尝试输出此RDD
与first
的联系人时。
引起:java.lang.NumberFormatException:empty String
我希望找到解决方案,当一条记录包含空字符串时,删除RDD
中的所有记录。另外,这个RDD
包含很多字段,因此很难逐个处理每个字段。我记得DataFrame
有这样的功能,例如na.drop()
。我需要这种功能适用于RDD
。
我使用的代码如下:
//using case class
case class Flight(dest_id:Long, dest:String, crsdeptime:Double, deptime:Double, depdelaymins:Double, crsarrtime:Double)
//defining function
def parseFlight(str: String): Flight = {
val line = str.split(",")
Flight(line(0), line(1), line(2), line(3), line(4).toInt, line(5).toLong)
}
//loading data
val textRDD = sc.textFile("/root/data/data.csv")
val flightsRDD = textRDD.map(parseFlight)
更新
当我使用由DateFrame转换的RDD时。我发现RDD的每一行都是Row对象。如何提取一行的某些字段来构建Edge对象?
答案 0 :(得分:1)
如果csv文件中的标题与案例类中的变量名称匹配,则更容易将数据作为数据框读取,然后使用na.drop()
。
val flightsDf = spark.read
.option("header", "true")
.option("inferSchema", "true")
.csv("/root/data/data.csv")
.na.drop()
.as[Flight]
如果你想要一个rdd,之后总是可以用flightsDf.rdd
转换它。