【问题标题】:NULL Pointer Exception, while creating DF inside foreach()在 foreach() 中创建 DF 时出现 NULL 指针异常
【发布时间】:2017-03-02 18:48:20
【问题描述】:

我必须从 S3 读取某些文件,因此我创建了一个包含这些文件在 S3 上的路径的 CSV。我正在使用以下代码读取创建的 CSV 文件:

val listofFilesRDD = sparkSession.read.textFile("s3://"+ file)

这工作正常。 然后我尝试读取每个路径并创建数据框,例如:

listofFilesRDD.foreach(iter => {
  val pathDF = sparkSession.read
    .schema(testSchema)
    .option("headers", true)
    .csv("s3://"+iter)

  pathDF.printSchema()
})

但是,上面的代码给出了 NullPointerException。

那么,我该如何修复上面的代码?

【问题讨论】:

    标签: scala apache-spark amazon-s3 spark-dataframe bigdata


    【解决方案1】:

    您可以通过以下方式解决上述问题,您只需创建 s3 文件路径数组并遍历该数组并在其中创建 DF,如下所示

    val listofFilesRDD = sparkSession.read.textFile("s3://"+ file)
    val listOfPaths = listofFilesRDD.collect()
    
        listOfPaths.foreach(iter => {
        val pathDF = sparkSession.read
        .schema(testSchema)
        .option("headers", true)
        .csv("s3://"+iter)
    
    
    pathDF.printSchema()
    })    
    

    【讨论】:

      【解决方案2】:

      你不能在 RDD 中访问 RDD !这是唯一的规则!你必须做一些别的事情来使你的逻辑工作!

      您可以在这里找到更多信息:NullPointerException in Scala Spark, appears to be caused be collection type?

      【讨论】:

        【解决方案3】:

        如果有人遇到DataFrame问题,可以解决这个问题。

           def parameterjsonParser(queryDF:DataFrame,spark:SparkSession): Unit ={
                queryDF.show()
                val otherDF=queryDF.collect()
                otherDF.foreach { row =>
                  row.toSeq.foreach { col =>
                    println(col)
                    mainJsonParser(col.toString,spark)
                  }
                }
        

        谢谢@Sandeep Purohit

        【讨论】:

          猜你喜欢
          • 2016-05-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多