NULL指针异常,在foreach()中创建DF时

问题描述 投票:2回答:3

我必须从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
3个回答
4
投票

您可以解决上面的问题,如下所示,您可以简单地创建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?


2
投票

如果有人遇到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

© www.soinside.com 2019 - 2024. All rights reserved.