我必须从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。
那么,我该如何修复上述代码?
答案 0 :(得分: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()
})
答案 1 :(得分:2)
您无法访问RDD内的RDD!这是唯一的规则!你必须做些别的事情才能使你的逻辑工作!
您可以在此处找到更多相关信息:NullPointerException in Scala Spark, appears to be caused be collection type?