आप DataFrame
पर select()
पर कॉल करने के संयोजन का उपयोग कर सकते हैं और प्रश्न में कॉलम को बदलने के लिए उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन (यूडीएफ) का उपयोग कर सकते हैं।
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.sql.functions._
मामला वर्ग उदाहरण DataFrame
स्थापित करने के लिए।
private case class Cust(id: Integer, name: String,
sales: Double, discount: Double, state: String)
फिर एक SQLContext
की स्थापना की और इस प्रकार DataFrame
बनाएँ:
import sqlContext.implicits._
val custs = Seq(
Cust(1, "Widget Co", 120000.00, 0.00, "AZ"),
Cust(2, "Acme Widgets", 410500.00, 500.00, "CA"),
Cust(3, "Widgetry", 410500.00, 200.00, "CA"),
Cust(4, "Widgets R Us", 410500.00, 0.0, "CA"),
Cust(5, "Ye Olde Widgete", 500.00, 0.0, "MA")
)
val customerDF = sc.parallelize(custs, 4).toDF()
एक सरल यूडीएफ है कि आप "छूट" स्तंभ को बदलने के लिए इस्तेमाल करेंगे रजिस्टर।
val myFunc = udf {(x: Double) => x + 1}
कॉलम प्राप्त करें, "छूट" कॉलम पर यूडीएफ लागू करने और दूसरों को छोड़कर उन्हें छोड़ दें।
val colNames = customerDF.columns
val cols = colNames.map(cName => customerDF.col(cName))
val theColumn = customerDF("discount")
मैं कॉलम से मेल खाने के लिए "बेहतर" तरीका ढूंढना चाहता हूं लेकिन निम्नलिखित कार्य करता हूं। कॉलम को नया नाम देने के लिए as()
का उपयोग करें क्योंकि हम कर सकते हैं!
val mappedCols = cols.map(c =>
if (c.toString() == theColumn.toString()) myFunc(c).as("transformed") else c)
उपयोग() के उत्पादन के लिए चयन नई DataFrame
val newDF = customerDF.select(mappedCols:_*)
आप
id name sales discount state
1 Widget Co 120000.0 0.0 AZ
2 Acme Widgets 410500.0 500.0 CA
3 Widgetry 410500.0 200.0 CA
4 Widgets R Us 410500.0 0.0 CA
5 Ye Olde Widgete 500.0 0.0 MA
बदल दिया है
id name sales transformed state
1 Widget Co 120000.0 1.0 AZ
2 Acme Widgets 410500.0 501.0 CA
3 Widgetry 410500.0 201.0 CA
4 Widgets R Us 410500.0 1.0 CA
5 Ye Olde Widgete 500.0 1.0 MA
में पूर्ण उदाहरण मिल सकते हैं source code here । यदि आप सटीक कॉलम प्रतिस्थापन के बारे में चिंतित नहीं हैं तो आप इसे सरल बना सकते हैं।
उदाहरण के लिए धन्यवाद। मेरे दृष्टिकोण से यूडीएफ स्पार्क डेटा फ्रेम एपीआई में बहुत ही सुरुचिपूर्ण और सहज नहीं है = ( –