当前位置: 首页 > 知识库问答 >
问题:

在Scala/Spark中有条件地映射CSV文件中的行,以生成另一个CSV文件

昝欣可
2023-03-14
    null

因此,我希望有条件地映射CSV文件的所有行,并将结果导出到另一个CSV文件中,每行的条件如下:

>

  • 如果第4列的值不为null,那么该行第4、5、6和7列的值应存储为名为LastValueSof4to7的数组。(在数据集中,如果第4列中的元素不为null,则第1、2和3列为null,可以忽略)

    如果第3列的值不为null,那么第1、2和3列的值以及上述lastValuesOf4to7数组中的四个元素应作为新行导出到另一个名为condensed.CSV的CSV文件中。(在数据集中,如果第3列中的元素不为null,则第4、5、6和7列为null,可以忽略)

    import scala.io.Source
    
    object structuringData {
      def main(args: Array[String]) {
    
      val data = Source.fromFile("/path/to/file.csv") 
    
      var lastValuesOf4to7 = Array("0","0","0","0")
    
      val lines = data.getLines // Get the lines of the file
    
      val splitLine = lines.map(s => s.split(',')).toArray // This gives an out of memory error since the original file is huge.
    
    
    
      data.close
      }
    }
    

    从上面的代码中可以看到,我试图将它移到数组中,但由于无法单独处理每一行,因此无法进一步进行。

    我非常肯定,在Scala/Spark上处理csv文件一定有简单明了的解决方案。

  • 共有1个答案

    公孙芷阳
    2023-03-14

    使用Spark-csv包,然后使用Sql查询来查询数据,并根据您的用例制作过滤器,然后在最后导出它。

    如果您使用的是Spark2.0.0,那么spark-csv将出现在spark-sql中,否则,如果您使用的是旧版本,请相应地添加依赖项。

    您可以在这里找到指向spark-csv的链接。

     类似资料: