web-dev-qa-db-ja.com

OutofMemoryErrorの取得-GCオーバーヘッド制限がpysparkで超過

プロジェクトの途中で、私のspark sql query exception pic

私は2つの文字列を取り、連結後にそれらを連結するユーザー定義関数を記述しました。これは、5の最も右側の部分文字列の長さが、合計文字列長に依存します(SQLサーバーのright(string、integer)の代替方法)

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

個別に問題なく動作します。今、私はそれをmy spark 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()

クエリとクエリ後の状態をここにアップロードしました。どうすればこの問題を解決できますか?親切に私を導きます

7
Kalyan

試してみる最も簡単なことは、spark executor memory:spark.executor.memory=6g
使用可能なすべてのメモリを使用していることを確認してください。 UIで確認できます。

更新1

--conf spark.executor.extrajavaoptions="Option"渡すことができます-Xmx1024mオプションとして。

現在は何ですかspark.driver.memoryおよびspark.executor.memory
それらを増やすと問題が解決するはずです。

sparkドキュメンテーションによると、

このオプションでSparkプロパティまたはヒープサイズ設定を設定することは不正です。Sparkプロパティは、SparkConfオブジェクトまたはspark-defaultsを使用して設定する必要があります。 spark-submitスクリプトで使用されるconfファイルヒープサイズの設定は、spark.executor.memoryで設定できます。

更新2

GCオーバーヘッドエラーはガベージコレクションの問題なので、この素晴らしい記事を読むこともお勧めします answer

7
Jarek