2016-12-06 2 views
3

in der Mitte des Projektes i unten Störung erhalten, nachdem eine Funktion in meinem Funken SQL-Abfrage exception picOutofMemoryError- GC Obergrenze überschreiten Erste in pyspark

i eine Benutzerfunktion definiert geschrieben habe, den Aufruf, die zwei Zeichenfolge nehmen und concat sie nach der Verkettung wird es am weitesten rechts stehenden Teilzeichenlänge nimmt von 5 hängen vom Gesamtstringlänge (alternativer Methode des rechten (string, integer) von SQL-Server)

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()) 

es funktioniert individuell fein. jetzt, wenn ich es in meinem Funken SQL-Abfrage übergeben als Spalte diese Ausnahme aufgetreten die Abfrage

enter image description here

die schriftliche Abfrage ist

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() 

i die die Abfrage und nach Abfrage Zustand hochgeladen haben hier . Wie könnte ich dieses Problem lösen. leite mich freundlicherweise

+0

Stellen Sie sicher, dass 'spark.memory.fraction = 0.6' zu lesen empfehlen würde. Wenn es höher ist, als dass Sie in Garbage Collection-Fehler geraten, siehe https://Stackoverflow.com/a/47283211/179014 – asmaier

Antwort

1

Die einfachste Sache wäre zu erhöhen Funken Testamentsvollstrecker Speicher, um zu versuchen: spark.executor.memory=6g
Stellen Sie sicher, Sie alle verfügbaren Speicher verwenden. Sie können dies in der Benutzeroberfläche überprüfen.

UPDATE 1

--conf spark.executor.extrajavaoptions="Option" Sie -Xmx1024m als Option passieren kann.

Wie lautet Ihre aktuelle spark.driver.memory und spark.executor.memory?
Die Erhöhung sollte das Problem lösen.

Beachten Sie, dass nach Funken Dokumentation:

Beachten Sie, dass es illegal ist, Spark-Eigenschaften oder Heap-Größe Einstellungen mit dieser Option zu setzen. Spark-Eigenschaften sollten mithilfe eines SparkConf-Objekts oder der Datei Spark-defaults.conf festgelegt werden, die mit dem Spark-Submit-Skript verwendet wird. Einstellungen für die Heap-Größe können mit spark.executor.memory festgelegt werden.

UPDATE 2

Als GC-Overhead Fehler ist Müll collcection Problem auch groß diese answer

+0

Vielen Dank für Ihre Antwort. Ich habe es gerade ausprobiert. aber nichts ändert sich ubuntu @ tvnubtest: ~/funken-2.0.0-bin-hadoop2.7 $ bin/pyspark --conf executor.extraClassPath = $ SPARK_HOME/lib/sqljdbc4.jar - Treiber-Klasse-Pfad $ SPARK_HOME/lib/sqljdbc4.jar --jars $ SPARK_HOME/lib/sqljdbc4.jar --executor-memory 6g – Kalyan

+0

Versuchen Sie, Ihrer JVM mehr Java-Heapspeicher zu geben durch: 'java -Xmx1024m com.yourName.yourClass' – Jarek

+0

Wenn Ihre Objekte verbrauchen zu viel Speicher, es wird JVM erlauben, reibungslos zu laufen – Jarek

Verwandte Themen