【问题标题】:Loading files in a loop in spark在火花中循环加载文件
【发布时间】:2018-08-07 03:12:20
【问题描述】:

我在一个目录中有n 数量的文件,具有相同的.txt 扩展名,我想循环加载它们,然后为每个文件分别创建dataframes

我已阅读this,但在我的情况下,我的所有文件都具有相同的扩展名,我想逐个迭代它们并为每个文件创建dataframe

我首先使用以下代码行计算目录中的文件

sc.wholeTextFiles("/path/to/dir/*.txt").count()

但我不知道我应该如何进一步进行? 请指导我。

我正在使用Spark 2.3Scala

谢谢。

【问题讨论】:

  • 为什么要为每个文件创建一个数据框?在 Spark 中没有什么意义。如果您只有一个数据框,每行都跟踪它来自的文档,那不是更好吗?

标签: scala apache-spark apache-spark-sql


【解决方案1】:

wholetextiles 返回一个配对的 Rdd 函数

def wholeTextFiles(path: String, minPartitions: Int): rdd.RDD[(String, String)]

你可以在rdd上做map,rdd的key是文件的路径,value是文件的内容

sc.wholeTextFiles("/path/to/dir/*.txt").take(2)

sc.wholeTextFiles("/path/to/dir/*.txt").map((x,y)=> some logic on x and y )

【讨论】:

    【解决方案2】:

    您可以使用 hadoop fs 并获取目录下的文件列表,然后对其进行迭代并将其保存到不同的数据帧。

    类似于以下内容:

    // Hadoop FS
    val hadoop_fs = FileSystem.get(sc1.hadoopConfiguration)
    
    // Get list of part files
    val fs_status = hadoop_fs.listLocatedStatus(new Path(fileFullPath))
    while (fs_status.hasNext) {
    
          val fileStatus = fs_status.next.getPath
          val filepath = fileStatus.toString
          val df = sc1.textFile(filepath)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 2019-11-25
      • 1970-01-01
      • 2018-03-07
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多