我的目标是从大型hdfs目录中读取几行,我使用spark2.2。
这个目录由之前的spark作业生成,每个任务在dir中生成一个小文件,因此整个目录大小为1GB,并且有数千个小文件。
当我使用collect()或head()或limit()时,spark会加载所有文件,并创建数千个任务(在sparkUI中监控),这需要花费大量时间,即使我只想显示前几行这个目录中的文件。
那么这是读这个目录的最快方式?我希望最好的解决方案只加载几行数据,这样可以节省时间
以下是我的代码:
sparkSession.sqlContext.read.format("csv").option("header","true").option("inferschema","true").load(file).limit(20).toJSON.toString()
sparkSession.sql(s"select * from $file").head(100).toString
sparkSession.sql(s"select * from $file").limit(100).toString
答案 0 :(得分:0)
如果您直接想要使用spark,那么无论如何都会加载文件然后它会记录下来。因此,首先甚至在Spark逻辑之前,您必须使用ur技术(例如java或scala或python)从目录中获取一个文件名,并将该文件名传递给文本File方法,该方法不会加载所有文件。