Obtenir OutofMemoryError - GC généraux limite de dépasser pyspark
dans le milieu de projet, je suis à soufflet d'erreur après l'appel d'une fonction dans mon étincelle de requête sql
j'ai écrit un utilisateur de définir la fonction qui va prendre deux chaînes de caractères et concat après concaténation, il va prendre à droite la plupart des sous-chaîne de longueur de 5 dépendent de la longueur totale de la chaîne(méthode alternative de droite(string,integer) de 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())
il fonctionne très bien individuellement. maintenant, quand je le passe dans mon étincelle requête sql en colonne de cette exception s'est produite
la requête est
la demande é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é la requête et après une requête d'état ici.
comment pourrais-je résoudre ce problème. De bien vouloir me guider
spark.memory.fraction=0.6
. Si elle est supérieure que vous exécutez dans la collecte des ordures erreurs, voir stackoverflow.com/a/47283211/179014
OriginalL'auteur Kalyan | 2016-12-06
Vous devez vous connecter pour publier un commentaire.
La chose la plus simple à essayer serait l'augmentation de l'étincelle exécuteur de la mémoire:
spark.executor.memory=6g
Assurez-vous d'utiliser toute la mémoire disponible. Vous pouvez le vérifier dans l'INTERFACE utilisateur.
Mise à JOUR de 1
--conf spark.executor.extrajavaoptions="Option"
vous pouvez passer-Xmx1024m
comme une option.Quelle est votre
spark.driver.memory
etspark.executor.memory
?L'augmentation devrait résoudre le problème.
Garder à l'esprit que, selon l'étincelle de la documentation:
Mise à JOUR 2
Comme GC frais généraux d'erreur est des ordures collcection problème vous recommande aussi de lire ce grand réponse
Laissez votre JVM plus Java heap space par:
java -Xmx1024m com.yourName.yourClass
Si vos objets sont de consommer trop de mémoire, il permettra à la JVM pour fonctionner correctement
pourrais-je écrire au-dessus de config type de code de passage de paramètre dans l'étincelle que j'ai posté le commentaire précédent thread ou dois-je besoin de plus d'entretien. je suis novice dans l'étincelle, donc je suis un peu confus. désolé de poser des question stupide
eh bien, j'ai fait un peu de tweak ici . j'ai augmenté la mémoire du PC à 32GO et ont mis en mémoire pilote de 24G et exécuteur testamentaire de la mémoire de 8G droit maintenant.et il a travaillé pour aujourd'hui, j'imagine. je ne reçois pas exception à la règle .et actuellement en train d'essayer d'augmenter java heapsize pour éviter les problèmes à l'avenir.Merci beaucoup pour les détails de votre réponse jarek pour l'instant. mais pourriez vous frapper si je suis arriver exception étrange encore 😛 blague
OriginalL'auteur Jarek