Я новичок в Spark. У меня есть две Spark SQl Dataframes. Код выглядит примерно так:Apache Spark Outer Join Принимая много времени
val df1 = sparksql.read.format(com.databricks.avro).loadfiles(filespath)
val df2 = sparksql.sql(select * from hivedb)
val df3 = df1.join(df2,df1.srcid <=> df2.srcid and df1.srccode <=> df2.srccode, left_outer)
sqlcontext.cacheastable(""table)
val insertid = sparkcontext.sql("select * from table where cid is null")
val updateid = sparkcontext.sql("select * from table where cid is not null")
Затем мы сохраняем эти два df в базе данных.
Оба кадра данных содержат около 10 полей, таких как srcid
, stccode
и сведения о клиенте, такие как имя, фамилия и т. Д. Это небольшие строки, которые изначально были varchar в таблице оракула.
Оба блока данных имеют около 3 миллионов записей.
Когда мы выполняем задание, мы видим много медлительности, когда Палач занимает около 2 часов, чтобы завершить вычисление. Мы пробовали множество настроек, таких как объединение влево и соединение с количеством разделов, но безрезультатно.
Когда данные небольшие (файлы 50K), задание завершается за 6 минут. Я видел Spark UI, и происходит только искробезопасное вычисление.
Мы даже установили память за палача 12 G и Учитывая это 24 палачей с NUM ядрами, как 20.
Мы используем искру 1.5.0, который поставляется в комплекте с Cloudera 5.X кластера и работает с пряжей.
Не могли бы вы сообщить мне, где я могу отлаживать медлительность в стороне от контекста искры?
Я добавил здесь пример кода. Надеюсь, что это поможет. Нам нужно запустить это объединение в искровом режиме и сохранить данные обратно в Oracle DB –