web-dev-qa-db-fra.com

Get OutofMemoryError - La limite de surcharge du GC dépasse dans pyspark

au milieu du projet, j'obtiens une erreur après avoir appelé une fonction dans ma spark sql query exception pic

j'ai écrit une fonction définie par l'utilisateur qui prendra deux chaînes et les concaténera après la concaténation, il faudra la plus grande longueur de sous-chaîne de 5 dépend de la longueur totale de la chaîne (méthode alternative de droite (chaîne, entier) du serveur 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())

cela fonctionne bien individuellement. maintenant quand je le passe dans ma spark sql requête en colonne cette exception s'est produite, la requête est

enter image description here

la requête écrite est

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

j'ai téléchargé l'état de la requête et après la requête ici. comment pourrais-je résoudre ce problème. Veuillez me guider

7
Kalyan

La chose la plus simple à essayer serait d'augmenter spark mémoire de l'exécuteur: spark.executor.memory=6g
Assurez-vous que vous utilisez toute la mémoire disponible. Vous pouvez vérifier cela dans l'interface utilisateur.

MISE À JOUR 1

--conf spark.executor.extrajavaoptions="Option" tu peux passer -Xmx1024m Comme une option.

Quel est votre actuel spark.driver.memory et spark.executor.memory?
Les augmenter devrait résoudre le problème.

Gardez à l'esprit que selon la documentation spark:

Notez qu'il est illégal de définir les propriétés Spark ou les paramètres de taille de segment de mémoire avec cette option. Spark doivent être définies à l'aide d'un objet SparkConf ou des étincelles par défaut). fichier conf utilisé avec le script spark-submit. Les paramètres de taille de segment de mémoire peuvent être définis avec spark.executor.memory.

MISE À JOUR 2

Comme l'erreur de surcharge du GC est un problème de collecte des ordures, je recommanderais également de lire cet excellent réponse

7
Jarek