在/mypath/orc/path下,我有几个不同日期的子文件夹:ie
/mypath/orc/mydate=20170817/part1.orc
/mypath/orc/mydate=20170817/part2.orc
/mypath/orc/mydate=20170820/part1.orc
/mypath/orc/mydate=20170820/part2.orc
/mypath/orc/mydate=20170821/part1.orc
/mypath/orc/mydate=20170821/part2.orc
我想要的输出与此类似(文件的实际名称并不重要):
/mypath/parquet/mydate=20170817/part1and2together.parquet
/mypath/parquet/mydate=20170820/part1and2together.parquet
/mypath/parquet/mydate=20170821/part1and2together.parquet
我一直在尝试下面,我可以硬编码过滤器在每个日期,并呼吁这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)
长时间是“几天到几周”,理想情况下希望它能在不到一天的时间内运行。
1条答案
按热度按时间rks48beu1#
我猜分区人(“mydate”)阿拉:
http://javaagile.blogspot.com/2017/12/parquet-vs-avro-vs-orc.html
鉴于,因此:
生成如下目录结构:
在这个特殊的例子中,我有街道数据。注意,自从我在
STREET
,现在每条街道都有自己的目录。当您想在分区内加入时,这会很方便,但请注意不要在hadoop namenode中创建太多条目。
如果你使用兽人,你会得到一个类似的区别,那就是: