我的目标是从大hdfs目录中读取几行,我正在使用spark2.2。
该目录是由先前的spark作业生成的,每个任务在目录中生成了一个小文件,因此整个目录大小约为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
如果您直接想要使用spark,则它将继续加载文件,然后进行记录。因此,即使在使用Spark逻辑之前,也必须首先使用ur技术(例如java或scala或python)从目录中获取一个文件名,然后将该文件名传递给不会加载所有文件的Text File方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句