au milieu du projet, j'obtiens une erreur après avoir appelé une fonction dans ma spark sql query
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
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
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