在HDFS上写入文件会创建很多零件文件(200),并且耗时很长
我正在将配置单元表(使用SqlContext.sql)加载到数据帧1(6K条记录)中,并注册到临时表中。我将临时表与另一个配置单元表(500万条记录)连接在一起,并加载到数据框2中。我正在使用左外部连接用数据框2值更新数据框1,我正尝试将dataframe_1(6K条记录)写入HDFS文件,花费1小时30分钟。我试过了 重新分区(dataframe_1.rdd.repartition(2)) 不合并写入文件(1) 只写一条记录,看看是否更快 但没有帮助。甚至dataframe_1上的show(10)记录也要花费很长时间。 我正在使用Spark解释器在Zeppelin中编写代码。我也无权访问任何配置设置。需要联系支持团队。
我是大数据平台的新手。任何帮助将不胜感激。
%spark
import org.apache.hadoop.fs._
import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.fs.Path
val fs=FileSystem.get(sc.hadoopConfiguration)
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
val Dataframe_1 = sqlContext.sql("""select * from Hive_Table_1""")
Dataframe_1.registerTempTable("Dataframe_table")
val Dataframe_2 = sqlContext.sql("""SELECT * FROM
(select B.col1, B.col2, A.col4, B.col3 FROM Dataframe_table A
left join Hive_Table_2 B on a.col1=b.col1 and a.col2=b.col2) A """ )
val Dataframe_1 =
Dataframe_1.join(Dataframe_2,Seq("col1","col2"),"leftouter")
.withColumn("col3", when($"col3".isNotNull,"Path Found").otherwise("Path
Not Found"))
Dataframe_1.coalesce(1).write.format("com.databricks.spark.csv")
.option("header","true").save("/abc")
答案 0 :(得分:0)
如您所说,如果您禁用了对HDFS的写入,但作业仍然很慢,则意味着对HDFS的写入不是瓶颈。可以预料到:结果的大小与第一个数据帧(6k条记录)的大小相同。无论如何,编写它应该非常快。 因此,很可能您的问题来自加入。是的,巨大的表连接可能要花费数小时。
为了验证这种情况,我通常将from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404
from django.shortcuts import redirect
class BookUpdateView(UpdateView):
"""Update the requested book."""
model = Book
form_class = BookForm
# ...
def get(self, *args, **kwargs):
try:
self.object = self.get_object()
except (ObjectDoesNotExist, Http404):
return redirect('books:index')
return self.render_to_response(self.get_context_data())
替换为.write
以隔离io操作。但这可能不适用于您的情况,因为spark sql api可能会优化.count
。
此外,您还应将.count
替换为coalsece
,因为前者消除了并行性。