Как извлечь каждое слово из текстового файла в scala - PullRequest
1 голос
/ 08 января 2020

Я довольно плохо знаком с Scala. У меня есть текстовый файл, который имеет только одну строку со словами файла, разделенных точкой с запятой (;). Я хочу извлечь каждое слово, удалить пробелы, преобразовать все в строчные буквы и вызвать их на основе индекса каждого слова. Ниже показано, как я подошел к нему:

newListUpper2.txt contains (Bed;  chairs;spoon; CARPET;curtains )
val file = sc.textFile("myfile.txt")
val lower = file.map(x=>x.toLowerCase)
val result = lower.flatMap(x=>x.trim.split(";"))
result.collect.foreach(println)

Ниже приведена копия REPL, когда я выполнил код

    scala> val file = sc.textFile("newListUpper2.txt")
    file: org.apache.spark.rdd.RDD[String] = newListUpper2.txt MapPartitionsRDD[5] at textFile at 
    <console>:24
    scala> val lower = file.map(x=>x.toLowerCase)
    lower: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[6] at map at <console>:26
    scala> val result = lower.flatMap(x=>x.trim.split(";"))
    result: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[7] at flatMap at <console>:28
    scala> result.collect.foreach(println)
bed                                                                          
 chairs
spoon
 carpet
curtains
scala> result(0)
<console>:31: error: org.apache.spark.rdd.RDD[String] does not take parameters
       result(0)

Результаты не обрезаются, а затем передают индекс в качестве параметра для получить слово по этому индексу дает ошибку. Мой ожидаемый результат должен быть таким, как указано ниже, если я передам индекс каждого слова в качестве параметра

result(0)= bed
result(1) = chairs
result(2) = spoon
result(3) = carpet
result(4) = curtains

Что я делаю неправильно?.

Ответы [ 2 ]

2 голосов
/ 08 января 2020
newListUpper2.txt contains (Bed;  chairs;spoon; CARPET;curtains )
val file = sc.textFile("myfile.txt")
val lower = file.map(x=>x.toLowerCase)
val result = lower.flatMap(x=>x.trim.split(";")) // x = `bed;  chairs;spoon; carpet;curtains` , x.trim does not work. trim func effective for head and tail only
result.collect.foreach(println)

Попробуйте:

val result = lower.flatMap(x=>x.split(";").map(x=>x.trim))
0 голосов
/ 08 января 2020

1) Выпуск 1

scala> result(0)
<console>:31: error: org.apache.spark.rdd.RDD[String] does not take parameters

Результатом является СДР, и он не может принимать параметры в этом формате. Вместо этого вы можете использовать result.show(10,false)

2) Проблема 2 - Чтобы достичь этого - result(0)= bed ,result(1) = chairs.....

scala> var result = scala.io.Source.fromFile("/path/to/File").getLines().flatMap(x=>x.split(";").map(x=>x.trim)).toList
result: List[String] = List(Bed, chairs, spoon, CARPET, curtains)

scala> result(0)
res21: String = Bed

scala> result(1)
res22: String = chairs
...