0

EDIT:MLlib пример классификации останавливается на стадии 1

Я попытался с помощью текста из ответа Габриэля и получил спам-функцию: 9 и особенность ветчины: 13. Я попытался изменить HashingTF к numFeatures = 9, то 13 , затем создавали по одному для каждого. Затем программа остановилась на «count at DataValidators.scala: 38», как и раньше.

Выполненные работы (4)
счетчик на 21 (spamFeatures)
счетчик на 23 (hamFeatures)
счетчик на 28 (trainingData.count())
сначала на GeneralizedLinearAlgorithm при 34 (Val модель = lrLearner. запустить (trainingData)

1) Почему особенности подсчитываются линиями, как в коде она раскалывается пробелами (»«)

2) Две вещи, которые я вижу dift из моего кода и кода Габриэля : a) Я не знаю e ничего о logger, но это не должно быть проблемой ...
b) Мои файлы находятся на hdfs (hdfs: //ip-abc-de-.compute.internal: 8020/user/ec2-user/spam.txt), еще раз не должно быть проблемой, но не уверен, есть ли что-то, чего я не вижу ...

3) Как долго мне это нужно? Я разрешил ему работать как минимум 10 минут: local [2] ..

Я предполагаю, что в этом случае это может быть какая-то проблема с моей установкой Spark/MLlib? Есть ли еще более простая программа, которую я могу запустить, чтобы проверить, есть ли проблема с MLLib? Я смог запустить другие искровые поточные/sql задания berfore ...

Спасибо!

[с искровым повторно отправил сообщества]

Привет всем,

Я пытаюсь запустить этот пример MLlib от обучения Spark: https://github.com/databricks/learning-spark/blob/master/src/main/scala/com/oreilly/learningsparkexamples/scala/MLlib.scala#L48

Вещи, которые я делаю по-другому:

1) вместо их spam.txt и normal.txt у меня есть текстовые файлы с 200 словами ... ничего огромного и просто текстовый, с периодами, запятыми и т. Д.

3) Я использовал numFeatures = 200, 1000 и 10000

Ошибка: Я продолжаю застревать, когда я пытаюсь запустить модель (на основе от детали от УИ ниже):

VAL модель = новый . LogisticRegressionWithSGD() бежать (trainingData)

Он замерзнет на что-то вроде этого:

[Стадия 1: ==============> (1 + 0)/4 ]

Некоторые детали от webui:

org.apache.spark.rdd.RDD.count(RDD.scala:910) 
org.apache.spark.mllib.util.DataValidators$$anonfun$1.apply(DataValidators.scala:38) 
org.apache.spark.mllib.util.DataValidators$$anonfun$1.apply(DataValidators.scala:37) 
org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm$$anonfun$run$2.apply(GeneralizedLinearAlgorithm.scala:161) 
org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm$$anonfun$run$2.apply(GeneralizedLinearAlgorithm.scala:161) 
scala.collection.LinearSeqOptimized$class.forall(LinearSeqOptimized.scala:70) 
scala.collection.immutable.List.forall(List.scala:84) 
org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm.run(GeneralizedLinearAlgorithm.scala:161) 
org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm.run(GeneralizedLinearAlgorithm.scala:146) 
$line21.$read$$iwC$$iwC$$iwC$$iwC.<init>(<console>:33) 
$line21.$read$$iwC$$iwC$$iwC.<init>(<console>:38) 
$line21.$read$$iwC$$iwC.<init>(<console>:40) 
$line21.$read$$iwC.<init>(<console>:42) 
$line21.$read.<init>(<console>:44) 
$line21.$read$.<init>(<console>:48) 
$line21.$read$.<clinit>(<console>) 
$line21.$eval$.<init>(<console>:7) 
$line21.$eval$.<clinit>(<console>) 
$line21.$eval.$print(<console>) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

Я не уверен, что я делаю неправильно ... любая помощь очень ценится, спасибо!

ответ

1

Спасибо за этот вопрос, я не знал об этих примерах, поэтому загрузил их и протестировал их. Я вижу, что git-репозиторий содержит файлы с большим количеством html-кода, он работает, но в итоге вы добавите 100 функций, которые, возможно, вы не получаете согласованных результатов, поскольку ваши собственные файлы содержат гораздо меньше функций. То, что я сделал, чтобы проверить это работает без HTML кода было удалить HTML-код из spam.txt и ham.txt следующим образом:

ham.txt =

Dear Spark Learner, Thanks so much for attending the Spark Summit 2014!  
Check out videos of talks from the summit at ... 
Hi Mom, Apologies for being late about emailing and forgetting to send you 
the package. I hope you and bro have been ... 
Wow, hey Fred, just heard about the Spark petabyte sort. I think we need to 
take time to try it out immediately ... 
Hi Spark user list, This is my first question to this list, so thanks in 
advance for your help! I tried running ... 
Thanks Tom for your email. I need to refer you to Alice for this one. I  
haven&#39;t yet figured out that part either ... 
Good job yesterday! I was attending your talk, and really enjoyed it. I 
want to try out GraphX ... 
Summit demo got whoops from audience! Had to let you know. --Joe 

spam.txt =

Dear sir, I am a Prince in a far kingdom you have not heard of. I want to 
send you money via wire transfer so please ... 
Get Viagra real cheap! Send money right away to ... 
Oh my gosh you can be really strong too with these drugs found in the  
rainforest. Get them cheap right now ... 
YOUR COMPUTER HAS BEEN INFECTED! YOU MUST RESET YOUR PASSWORD. Reply to  
this email with your password and SSN ... 
THIS IS NOT A SCAM! Send money and get access to awesome stuff really 
cheap and never have to ... 

Затем используйте приведенную ниже модификацию MLib.scala, убедитесь, что в вашем проекте указана ссылка log4j, чтобы перенаправить вывод в файл вместо консоли, поэтому вам в основном нужно запускать дважды, в первом запуске смотреть вывод, печатая # из функции в спаме и ветчине вы можете установить правильное количество функций (вместо 100). I используется 5.

package com.oreilly.learningsparkexamples.scala 

import org.apache.spark.{SparkConf, SparkContext} 
import org.apache.spark.mllib.classification.LogisticRegressionWithSGD 
import org.apache.spark.mllib.feature.HashingTF 
import org.apache.spark.mllib.regression.LabeledPoint 
import org.apache.log4j.Logger 

object MLlib { 

private val logger = Logger.getLogger("MLlib") 

def main(args: Array[String]) { 
    logger.info("This is spark in Windows") 
    val conf = new SparkConf().setAppName(s"Book example: Scala").setMaster("local[2]").set("spark.executor.memory","1g") 
    //val conf = new SparkConf().setAppName(s"Book example: Scala") 
    val sc = new SparkContext(conf) 
    // Load 2 types of emails from text files: spam and ham (non-spam). 
    // Each line has text from one email. 
    val spam = sc.textFile("spam.txt") 
    val ham = sc.textFile("ham.txt") 
    // Create a HashingTF instance to map email text to vectors of 5 (not 100) features. 
    val tf = new HashingTF(numFeatures = 5) 
    // Each email is split into words, and each word is mapped to one feature. 
    val spamFeatures = spam.map(email => tf.transform(email.split(" "))) 
    println ("features in spam " + spamFeatures.count()) 
    val hamFeatures = ham.map(email => tf.transform(email.split(" "))) 
    println ("features in ham " + ham.count()) 
    // Create LabeledPoint datasets for positive (spam) and negative (ham) examples. 
    val positiveExamples = spamFeatures.map(features => LabeledPoint(1, features)) 
    val negativeExamples = hamFeatures.map(features => LabeledPoint(0, features)) 
    val trainingData = positiveExamples ++ negativeExamples 
    trainingData.cache() // Cache data since Logistic Regression is an iterative algorithm. 
    // Create a Logistic Regression learner which uses the LBFGS optimizer. 
    val lrLearner = new LogisticRegressionWithSGD() 
    // Run the actual learning algorithm on the training data. 
    val model = lrLearner.run(trainingData) 
    // Test on a positive example (spam) and a negative one (ham). 
    // First apply the same HashingTF feature transformation used on the training data. 
    val ex1 = "O M G GET cheap stuff by sending money to ..."; 
    val ex2 = "Hi Dad, I started studying Spark the other ..." 
    val posTestExample = tf.transform(ex1.split(" ")) 
    val negTestExample = tf.transform(ex2.split(" ")) 
    // Now use the learned model to predict spam/ham for new emails. 
    println(s"Prediction for positive test example: ${ex1} : ${model.predict(posTestExample)}") 
    println(s"Prediction for negative test example: ${ex2} : ${model.predict(negTestExample)}") 
    sc.stop() 
    } 
} 

Когда я бегу это на выходе я получаю:

features in spam 5 
features in ham 7 
Prediction for positive test example: O M G GET cheap stuff by sending money  
to ... : 1.0 
Prediction for negative test example: Hi Dad, I started studying Spark the  
other ... : 0.0 
+0

Спасибо, Габриэль за подробное объяснение. Пара последует за вопросами, так как я еще не смог запустить программу ... не могли бы вы проверить мое редактирование в главном вопросе, так как его трудно спросить в комментарии? Большое спасибо. – SparkKafkaSetup

+0

Не могли бы вы поделиться своим файлом pom.xml? Спасибо – SparkKafkaSetup

-1

У меня была такая же проблема с искрой 1.5.2 на моем локальном кластере. Моя программа остановилась на «count at DataValidators.scala: 40». Решено запустить искра как «spark-submit --master local»

-1

У меня была аналогичная проблема с Spark 1.5.2 на моем локальном кластере. Моя программа остановилась на «count at DataValidators.scala: 40». Я кешировал свои возможности обучения. Удалено кэширование (просто не вызывало функцию кеша), и оно разрешилось. Однако не уверен в фактической причине.

+0

Не могли бы вы объяснить логику этого? Насколько я знаю, итеративные алгоритмы MLib должны работать лучше с кэшированными данными – Disha

Смежные вопросы