处理Scala / Spark类中缺少的元素

时间:2016-01-07 11:31:36

标签: scala apache-spark

我在Hadoop中有以下文件

$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num Felder in Zeile $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}

看起来像这样

val dataset=sc.textFile("/user/hue/mycompanies1.csv")

我的scala / Spark代码如下:

CS,84,Jimmys Bistro, Jimmys
CS,90,Pauls Fish
CS,100, Happy Hardware

当我在获得nullpointerexception后尝试访问公司RDD时,因为数据中缺少昵称值。我如何优雅地处理这个问题?

1 个答案:

答案 0 :(得分:2)

由于昵称是可选的,我会更改案例类以反映它,然后使用各种方法之一来选择性地获取index-3元素,例如:

case class Company (
 record_type: String, 
 company_num: Integer, 
 company_name: String, 
 nickname: Option[String]
)

val company = dataset.map(k=>k.split(",")).map(
    k => Company(k(0).trim, k(1).toInt, k(2).trim, k.drop(3).headOption.map(_.trim))