के साथ डेटाफ्रेम का उपयोग करना मान लें कि मेरे पास डेटाफ्रेम है (जिसे मैंने एचडीएफएस पर सीएसवी से पढ़ा है) और मैं इसे एमएलआईबीबी के माध्यम से कुछ एल्गोरिदम प्रशिक्षित करना चाहता हूं। मैं पंक्तियों को लेबल किए गए पॉइंट्स में कैसे परिवर्तित करूं या अन्यथा इस डेटासेट पर एमएललिब का उपयोग कैसे करूं?एमएलआईबी
एमएलआईबी
उत्तर
आप यह मानते हुए स्काला का उपयोग कर रहे:
val results : DataFrame = sqlContext.sql(...)
चरण 1:
मान लें कि आपका प्राप्त DataFrame
इस प्रकार करते हैं फोन results.printSchema()
- यह आपको बताएंगे कि न केवल में स्तंभों डेटाफ्रेम और (यह महत्वपूर्ण है) उनके आदेश, लेकिन स्पार्क एसक्यूएल सोचता है कि उनके प्रकार क्या हैं। एक बार जब आप यह आउटपुट देखते हैं तो चीजें बहुत कम रहस्यमय होती हैं।
चरण 2: एक RDD[Row]
DataFrame
से हट जाओ:
val rows: RDD[Row] = results.rdd
चरण 3: अब खींच का मामला जो कुछ भी अलग-अलग पंक्तियों से बाहर ब्याज आप फ़ील्ड है। इसके लिए आपको प्रत्येक फ़ील्ड की 0-आधारित स्थिति और इसके प्रकार की जानकारी जाननी होगी, और सौभाग्य से आपने उपरोक्त चरण 1 में वह सब प्राप्त किया है। उदाहरण के लिए, मान लीजिए कि आप एक SELECT x, y, z, w FROM ...
और स्कीमा मुद्रण किया जाने झुकेंगे
root
|-- x double (nullable = ...)
|-- y string (nullable = ...)
|-- z integer (nullable = ...)
|-- w binary (nullable = ...)
और सब आप x
और z
उपयोग करना चाहता था मान लीजिए। यहाँ से
rows.map(row => {
// x has position 0 and type double
// z has position 2 and type integer
(row.getDouble(0), row.getInt(2))
})
तुम सिर्फ प्रासंगिक MLlib वस्तुओं को बनाने के कोर स्पार्क का उपयोग करें: आप उन्हें इस प्रकार एक RDD[(Double, Integer)]
में बाहर खींच सकते हैं। यदि आपके एसक्यूएल सरणी प्रकार के कॉलम लौटाता है, तो चीजें थोड़ा और जटिल हो सकती हैं, इस मामले में आपको उस कॉलम के लिए getList(...)
पर कॉल करना होगा।
आप जावा का उपयोग कर रहे मानते हुए (स्पार्क संस्करण 1.6.2):
यहाँ मशीन सीखने के लिए DataFrame का उपयोग कर जावा कोड का एक सरल उदाहरण है।
यह निम्न संरचना के साथ एक JSON लोड करता है,
[{ "लेबल": 1, "att2": 5.037089672359123, "att1": 2.4100883023159456} ...]
प्रशिक्षण और परीक्षण में डेटा,
- ट्रेन मॉडल ट्रेन डेटा का उपयोग कर,
- परीक्षण डाटा को मॉडल लागू करते हैं और
- stor विभाजन परिणाम के रूप में।
इसके अलावा official documentation के अनुसार वर्तमान संस्करण 2.0.0 के बाद से एमएलआईबीबी के लिए "डेटाफ्रेम-आधारित एपीआई प्राथमिक API" है। तो आप डेटाफ्रेम का उपयोग करके कई उदाहरण पा सकते हैं।
कोड:
SparkConf conf = new SparkConf().setAppName("MyApp").setMaster("local[2]");
SparkContext sc = new SparkContext(conf);
String path = "F:\\SparkApp\\test.json";
String outputPath = "F:\\SparkApp\\justTest";
System.setProperty("hadoop.home.dir", "C:\\winutils\\");
SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);
DataFrame df = sqlContext.read().json(path);
df.registerTempTable("tmp");
DataFrame newDF = df.sqlContext().sql("SELECT att1, att2, label FROM tmp");
DataFrame dataFixed = newDF.withColumn("label", newDF.col("label").cast("Double"));
VectorAssembler assembler = new VectorAssembler().setInputCols(new String[]{"att1", "att2"}).setOutputCol("features");
StringIndexer indexer = new StringIndexer().setInputCol("label").setOutputCol("labelIndexed");
// Split the data into training and test
DataFrame[] splits = dataFixed.randomSplit(new double[] {0.7, 0.3});
DataFrame trainingData = splits[0];
DataFrame testData = splits[1];
DecisionTreeClassifier dt = new DecisionTreeClassifier().setLabelCol("labelIndexed").setFeaturesCol("features");
Pipeline pipeline = new Pipeline().setStages(new PipelineStage[] {assembler, indexer, dt});
// Train model
PipelineModel model = pipeline.fit(trainingData);
// Make predictions
DataFrame predictions = model.transform(testData);
predictions.rdd().coalesce(1,true,null).saveAsTextFile("justPlay.txt" +System.currentTimeMillis());
- 1. स्पार्क एमएलआईबी
- 2. अपाचे स्पार्क - एमएलआईबी - सहयोगी फ़िल्टरिंग
- 3. स्पार्क एमएलआईबी मॉडल कैसे पेश करें?
- 4. अपाचे स्पार्क एमएलआईबी मॉडल फ़ाइल प्रारूप
- 5. स्पार्क एमएलआईबी रैखिक प्रतिगमन (रैखिक कम से कम वर्ग) यादृच्छिक परिणाम
- 6. मेसोस पर स्पार्क में Google प्रोटोबफ से "प्रोटोकॉल संदेश अस्वीकार कर दिया गया था क्योंकि यह बहुत बड़ा था" कैसे ठीक करें?
- 7. अपाचे स्पार्क एएलएस सिफारिश
- 8. अपाचे स्पार्क और अपाचे एपेक्स के बीच अंतर क्या है?
- 9. सहकारी फ़िल्टरिंग में एएलएस निहित प्रतिक्रिया के लिए वरीयताओं को कैसे सेट करें?
आप अपने कॉलम के डेटा प्रकार का उल्लेख नहीं किया है, लेकिन वे (पूर्णांक, डबल आदि) सांख्यिक आप उपयोग कर सकते हैं [VectorAssembler] कर रहे हैं (http: //spark.apache फीचर कॉलम को [वेक्टर] के एक कॉलम में बदलने के लिए .org/docs/latest/ml-features.html # vectorassembler) (http://spark.apache.org/docs/latest/mllib-data-types.html) । – Ben