Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何读取和写入多个子文件夹?_Java_Scala_Apache Spark_Hadoop - Fatal编程技术网

Java 如何读取和写入多个子文件夹?

Java 如何读取和写入多个子文件夹?,java,scala,apache-spark,hadoop,Java,Scala,Apache Spark,Hadoop,在/mypath/orc/path下,我有几个不同日期的子文件夹: 即 我想要的输出与此类似(文件的实际名称并不重要): 我一直在尝试下面的方法,我可以在每个日期硬编码过滤器并调用它3次,但如果我有1000个日期,它将运行很长时间。我在代码中遗漏了什么,让它一次处理多个日期输入到多个日期输出 ./spark-shell val orcfile = "hdfs:///mypath/orc/*/*.orc*" val df = spark.read.format("orc").load(orcfi

在/mypath/orc/path下,我有几个不同日期的子文件夹: 即

我想要的输出与此类似(文件的实际名称并不重要):

我一直在尝试下面的方法,我可以在每个日期硬编码过滤器并调用它3次,但如果我有1000个日期,它将运行很长时间。我在代码中遗漏了什么,让它一次处理多个日期输入到多个日期输出

./spark-shell 
val orcfile = "hdfs:///mypath/orc/*/*.orc*"
val df = spark.read.format("orc").load(orcfile) 
df.createOrReplaceTempView("MYTBL") 
val results = spark.sql("SELECT * FROM MYTBL")
results.write.mode("Overwrite").format("parquet").save("hdfs:///mypath/parquet/")
环境:

  • 独立模式下的Spark 2.3.0
  • Hadoop 2.8.3
  • EC2集群-1台主机,配备64个CPU、256GB RAM和5个工作线程(每个工作线程配备64个CPU、256GB RAM)
  • 长时间是“几天到几周”,理想情况下希望它在不到一天的时间内运行

    我猜partitionBy(“myDate”)ala:

    鉴于,因此:

    spark.read
        .option("header", "true")
        .option("inferSchema", "true")
        .csv("IN_FILE").sort(partitionBy)
        .write.partitionBy("STREET").mode(SaveMode.Overwrite)
        .parquet("OUT_PARTITIONED")
    
    生成如下目录结构:

    $ hadoop fs -ls OUT_PARTITIONED.parquet | head
    Found 69415 items
    drwxrwxr-x   - user user          0 2017-11-23 09:16 OUT_PARTITIONED.parquet/STREET=%22%22%22Glück-auf%22%22-Straße%22
    drwxrwxr-x   - user user          0 2017-11-23 09:16 OUT_PARTITIONED.parquet/STREET=%22Kellergasse %22%22Moorberg%22%22%22
    drwxrwxr-x   - user user          0 2017-11-23 09:16 OUT_PARTITIONED.parquet/STREET=0Montangebiet
    drwxrwxr-x   - user user          0 2017-11-23 09:16 OUT_PARTITIONED.parquet/STREET=0Tallage
    
    在这个特殊的例子中,我有街道数据。请注意,由于我在
    街道上进行了分区,因此每条街道现在都有自己的目录

    当您希望在分区内加入时,这会很方便,但请注意不要在Hadoop NameNode中创建太多条目

    如果使用Orc,您会得到类似的区别,即:

    我猜partitionBy(“myDate”)ala:

    鉴于,因此:

    spark.read
        .option("header", "true")
        .option("inferSchema", "true")
        .csv("IN_FILE").sort(partitionBy)
        .write.partitionBy("STREET").mode(SaveMode.Overwrite)
        .parquet("OUT_PARTITIONED")
    
    生成如下目录结构:

    $ hadoop fs -ls OUT_PARTITIONED.parquet | head
    Found 69415 items
    drwxrwxr-x   - user user          0 2017-11-23 09:16 OUT_PARTITIONED.parquet/STREET=%22%22%22Glück-auf%22%22-Straße%22
    drwxrwxr-x   - user user          0 2017-11-23 09:16 OUT_PARTITIONED.parquet/STREET=%22Kellergasse %22%22Moorberg%22%22%22
    drwxrwxr-x   - user user          0 2017-11-23 09:16 OUT_PARTITIONED.parquet/STREET=0Montangebiet
    drwxrwxr-x   - user user          0 2017-11-23 09:16 OUT_PARTITIONED.parquet/STREET=0Tallage
    
    在这个特殊的例子中,我有街道数据。请注意,由于我在
    街道上进行了分区,因此每条街道现在都有自己的目录

    当您希望在分区内加入时,这会很方便,但请注意不要在Hadoop NameNode中创建太多条目


    如果使用Orc,您会得到类似的区别,即:

    什么是“长时间”?秒?分钟?小时?你能告诉我们你的集群吗?有多少工人?它是内存中的还是分布式集群?我们需要更多的背景。如果问题是Spark本身,数千次约会需要几周的时间来处理似乎是不对的。我建议您在本地模式下使用几十个日期进行一些评测,看看哪里可以识别瓶颈。总共需要处理800000个日期,我知道在许多迭代中,每次调用的新JVM的旋转将是非常重要的尝试看看是否可以检查数据以减少花费的时间。我发现我的spark工作曾经被卡住,但检查点解决了这个问题。到底什么是“长时间”?秒?分钟?小时?你能告诉我们你的集群吗?有多少工人?它是内存中的还是分布式集群?我们需要更多的背景。如果问题是Spark本身,数千次约会需要几周的时间来处理似乎是不对的。我建议您在本地模式下使用几十个日期进行一些评测,看看哪里可以识别瓶颈。总共需要处理800000个日期,我知道在许多迭代中,每次调用的新JVM的旋转将是非常重要的尝试看看是否可以检查数据以减少花费的时间。我发现我的spark工作过去常常被卡住,但检查点解决了这个问题。