2016-12-06 10 views
3

в середине проекта я получаю сообщение об ошибке сильфона после вызова функции в моем искрового SQL запрос exception picПолучение OutofMemoryError- GC верхний предел превышает в pyspark

я написал пользователь определить функцию, которая будет принимать две строки и Concat их после конкатенации займет право наиболее подстроку длиной от 5 зависит от общей длины строки (альтернативный метод справа (строка, целое число) из SQL-сервера)

from pyspark.sql.types import* 


def concatstring(xstring, ystring): 
      newvalstring = xstring+ystring 
      print newvalstring 
      if(len(newvalstring)==6): 
       stringvalue=newvalstring[1:6] 
       return stringvalue 
      if(len(newvalstring)==7): 
       stringvalue1=newvalstring[2:7] 
       return stringvalue1 
      else: 
       return '99999' 


spark.udf.register ('rightconcat', lambda x,y:concatstring(x,y), StringType()) 

он отлично работает индивидуально. теперь, когда я передать его в моей искрового SQL запроса в столбце произошедшей это исключение запрос

enter image description here

письменный запрос

spark.sql("select d.BldgID,d.LeaseID,d.SuiteID,coalesce(BLDG.BLDGNAME,('select EmptyDefault from EmptyDefault')) as LeaseBldgName,coalesce(l.OCCPNAME,('select EmptyDefault from EmptyDefault'))as LeaseOccupantName, coalesce(l.DBA, ('select EmptyDefault from EmptyDefault')) as LeaseDBA, coalesce(l.CONTNAME, ('select EmptyDefault from EmptyDefault')) as LeaseContact,coalesce(l.PHONENO1, '')as LeasePhone1,coalesce(l.PHONENO2, '')as LeasePhone2,coalesce(l.NAME, '') as LeaseName,coalesce(l.ADDRESS, '') as LeaseAddress1,coalesce(l.ADDRESS2,'') as LeaseAddress2,coalesce(l.CITY, '')as LeaseCity, coalesce(l.STATE, ('select EmptyDefault from EmptyDefault'))as LeaseState,coalesce(l.ZIPCODE, '')as LeaseZip, coalesce(l.ATTENT, '') as LeaseAttention,coalesce(l.TTYPID, ('select EmptyDefault from EmptyDefault'))as LeaseTenantType,coalesce(TTYP.TTYPNAME, ('select EmptyDefault from EmptyDefault'))as LeaseTenantTypeName,l.OCCPSTAT as LeaseCurrentOccupancyStatus,l.EXECDATE as LeaseExecDate, l.RENTSTRT as LeaseRentStartDate,l.OCCUPNCY as LeaseOccupancyDate,l.BEGINDATE as LeaseBeginDate,l.EXPIR as LeaseExpiryDate,l.VACATE as LeaseVacateDate,coalesce(l.STORECAT, (select EmptyDefault from EmptyDefault)) as LeaseStoreCategory ,rightconcat('00000',cast(coalesce(SCAT.SORTSEQ,99999) as string)) as LeaseStoreCategorySortID from Dim_CMLease_primer d join LEAS l on l.BLDGID=d.BldgID and l.LEASID=d.LeaseID left outer join SUIT on SUIT.BLDGID=l.BLDGID and SUIT.SUITID=l.SUITID left outer join BLDG on BLDG.BLDGID= l.BLDGID left outer join SCAT on SCAT.STORCAT=l.STORECAT left outer join TTYP on TTYP.TTYPID = l.TTYPID").show() 

я загрузил запрос и после того, как состояние запроса здесь , как я могу решить эту проблему. Просьба направлять мне

+0

Убедитесь, что ваш 'spark.memory.fraction = 0.6'. Если он выше, чем у вас возникают ошибки сбора мусора, см. Https://stackoverflow.com/a/47283211/179014 – asmaier

ответ

1

проще всего попробовать было бы увеличение искрового исполнитель памяти: spark.executor.memory=6g
Убедитесь, что вы используете всю доступную память. Вы можете проверить это в пользовательском интерфейсе.

UPDATE 1

--conf spark.executor.extrajavaoptions="Option" вы можете передать -Xmx1024m в качестве опции.

Ваш текущий spark.driver.memory и spark.executor.memory?
Увеличение их должно устранить проблему.

Имейте в виду, что в соответствии с искровым документации:

Обратите внимание, что это незаконно, чтобы установить свойства искры или настройки размера кучи с помощью этой опции. Свойства искры должны быть заданы с использованием объекта SparkConf или файла spark-defaults.conf, используемого в скрипте spark-submit. Параметры размера кучи можно установить с помощью spark.executor.memory.

UPDATE 2

Как ошибка GC накладных проблема мусора collcection также рекомендую прочитать этот великий answer

+0

Благодарим вас за ответ. Я только что попробовал. но ничего не меняется ubuntu @ tvnubtest: ~/spark-2.0.0-bin-hadoop2.7 $ bin/pyspark --conf executor.extraClassPath = $ SPARK_HOME/lib/sqljdbc4.jar --driver-class-path $ SPARK_HOME/lib/sqljdbc4.jar --jars $ SPARK_HOME/lib/sqljdbc4.jar --executor-memory 6g – Kalyan

+0

Попробуйте использовать JVM больше пространства кучи Java: 'java -Xmx1024m com.yourName.yourClass' – Jarek

+0

Если ваши объекты потребляют слишком много памяти, это позволит JVM работать плавно. – Jarek