Java 如何读取和写入多个子文件夹?
在/mypath/orc/path下,我有几个不同日期的子文件夹: 即 我想要的输出与此类似(文件的实际名称并不重要): 我一直在尝试下面的方法,我可以在每个日期硬编码过滤器并调用它3次,但如果我有1000个日期,它将运行很长时间。我在代码中遗漏了什么,让它一次处理多个日期输入到多个日期输出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
./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.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工作过去常常被卡住,但检查点解决了这个问题。