परिदृश्य:अपाचे स्पार्क: SparkSql में, एसक्यूएल के एसक्यूएल इंजेक्शन की चपेट में हैं
कहो हाइव में एक टेबल है, और इसके नीचे SparkSql अपाचे में स्पार्क, जहां तालिका नाम पारित हो जाता है का उपयोग कर क्वेरी की जाती है एक तर्क के रूप में और क्वेरी से जुड़े हुए हैं।
गैर-वितरित प्रणाली के मामले में, मुझे SQL-इंजेक्शन भेद्यता की मूल समझ है और जेडीबीसी के संदर्भ में उन प्रकार के परिदृश्य में createStatement/readyStatement के उपयोग को समझते हैं।
लेकिन स्पार्कस्क्ल के मामले में इस परिदृश्य के बारे में क्या, यह कोड कमजोर है? कोई अंतर्दृष्टि?
def main(args: Array[String]) {
val sconf = new SparkConf().setAppName("TestApp")
val sparkContext = new SparkContext(sconf)
val hiveSqlContext = new org.apache.spark.sql.hive.HiveContext(sparkContext)
val tableName = args(0) // passed as an argument
val tableData = hiveSqlContext.sql("select IdNUm, Name from hiveSchemaName." + tableName + " where IdNum <> '' ")
.map(x => (x.getString(0), x.getString(1))).collectAsMap()
................
...............
}
स्पार्क सत्र v2.0 और बाद में उपलब्ध है। 1.5 में इसे करने के लिए प्रतिबंध की आवश्यकता है। क्या स्पार्क कॉन्टेक्स्ट का उपयोग sqlContext या hiveSqlContext के माध्यम से समान काम करना संभव है? –
आप SparkSession –