如何从3个单独的文件夹中的不同目录中复制3种不同类型的文件?

时间:2017-04-07 13:04:12

标签: scala apache-spark hdfs

如果您想知道我是如何解决的,请转到here

我的目录结构如下。在数据目录内,我有一个名为malloc的文件夹。里面有gz压缩文件。我只需要一个以mta.gz和dfr.gz结尾的日期(当前)的文件。每个date_latter文件夹都有不同数量的这些文件。我需要将mta文件复制到名为mta的文件夹,将dfr文件复制到dfr文件夹。我希望它们仍然是压缩的,但如果不是那样的话。

date_latter

目前我有

data
--20170202_A
----20170202A(some_random_string)mta.gz
----20170202A(some_random_string)dfr.gz
----20170202A(some_random_string)crr.gz
--20170202_B
----20170202B(some_random_string)mta.gz
----20170202B(some_random_string)dfr.gz
----20170202B(some_random_string)crr.gz
--20170202_C
--20170203_A
--20170203_B
--20170203_C
--20170201_A
--20170201_B
--20170201_C

当我尝试运行println(path.getPath)时,我得到了所有mta文件的路径,但是当我尝试实际复制时

  def main(args: Array[String]) = {
    val conf = new Configuration()
    val sparkConf = new SparkConf()
    val sc = new SparkContext(sparkConf)

    val mta = "mta"
    val rcr = "dfr"
    val sub = "sub"

    val inPath = "/user/comverse/data/20170404_*/*" + mta + ".gz"

val fs = FileSystem.get( conf )
val fromPath = fs.globStatus(new Path(inPath))
for(path <- fromPath) {
      sc.textFile(path.getPath.toString).saveAsTextFile("/apps/hive/warehouse/adoc.db/fct_evkuzmin/file_" + mta)
//      println(path.getPath)
    }
    sc.stop()
  }

和fct_evkuzmin看起来像

org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://nameservice1/apps/hive/warehouse/adoc.db/fct_evkuzmin/file_mta already exists

到底我想要

--/fct_evkuzmin/file_mta/_temporary/0/_temporary
----many folders named like `attempt_201704071536_0000_m_000000_0` with empty files inside
------attempt_201704071536_0000_m_000000_0(emty)

0 个答案:

没有答案