में डेटाफ्रेम में शामिल होने के दौरान प्रसारण नहीं हो रहा है नीचे नमूना कोड है जो मैं चला रहा हूं। जब यह स्पार्क जॉब चलता है, तो डेटाफ्रेम जुड़ता है ब्रॉडकास्ट के बजाए sortmergejoin का उपयोग कर हो रहा है।स्पार्क 1.6
def joinedDf (sqlContext: SQLContext,
txnTable: DataFrame,
countriesDfBroadcast: Broadcast[DataFrame]):
DataFrame = {
txnTable.as("df1").join((countriesDfBroadcast.value).withColumnRenamed("CNTRY_ID", "DW_CNTRY_ID").as("countries"),
$"df1.USER_CNTRY_ID" === $"countries.DW_CNTRY_ID", "inner")
}
joinedDf(sqlContext, txnTable, countriesDfBroadcast).write.parquet("temp")
ब्रॉडकास्ट जॉइन तब भी नहीं हो रहा है जब मैं शामिल कथन में प्रसारण() संकेत निर्दिष्ट करता हूं।
ऑप्टिमाइज़र डेटाफ्रेम को हैशपाइटिशन कर रहा है और यह डेटा स्कू का कारण बन रहा है।
क्या किसी ने इस व्यवहार को देखा है?
मैं स्पार्क 1.6 और हाइव कॉन्टेक्स्ट का उपयोग कर यार्नकॉन्टेक्स्ट के रूप में यार्न पर इसे चला रहा हूं। स्पार्क नौकरी 200 निष्पादकों पर चलती है। और txnTable का डेटा आकार 240 जीबी है और देशों का डेटासाइज डीएफ 5 एमबी है।
अब, मैं ब्रॉडकास्ट हैशजोइन को एक रन में और SortMergeJoin को किसी अन्य रन में देख रहा हूं। (एक ही कोड, अलग डेटा सेट)। –
मेरा अनुमान है कि प्रसारण में शामिल होने के लिए यह आकार सीमा से अधिक है। – zero323
मेरे पास बहुत अधिक स्पार्क.sql.autoBroadcastJoinThreshold है। लगभग। 1GB। और प्रसारण की गई फाइल लगभग 5 एमबी है। हालांकि, दूसरे भाग में, उपर्युक्त सिफारिश महान काम करती है। –