Сохранить файл без скобок - PullRequest
0 голосов
/ 26 июня 2019

Я бы хотел, чтобы мой конечный результат был без скобок

Я пробовал это, но он выдал столько ошибок:

.map(x => x.mkString(",").saveAsTextFile("/home/amel/new")

Это мой код

val x= sc.textFile("/home/amel/1MB").filter(!_.contains("NULL"))
.filter(!_.contains("Null"))
val re = x.map(row => {
val cols = row.split(",")
val Cycle = cols(2)
val Duration = Cycle match {
case "Licence" => "3 years"
case "Master" => "2 years"
case "Ingéniorat" => "5 years"
case "Ingeniorat" => "5 years"
case "Doctorat" => "3 years"
case _ => "NULL"
}
(cols(1).split("-")(0) + "," + Cycle + "," + Duration + "," + 
cols(3), 1)
}).reduceByKey(_ + _)
re.collect.foreach(println)
}

Вот результат, который я получаю:

(1999,2 years,Master,IC,57)

(2013,3 years,Doctorat,SI,44)

(2013,3 years,Licence,IC,73)

(2009,5 years,Ingeniorat,IC,58)

(2011,2 years,Master,SI,61)

(2003,5 years,Ingeniorat,IC,65)

(2019,3 years,Doctorat,SI,80)

Я хотел бы: снять скобки в начале и в конце.

Ответы [ 2 ]

4 голосов
/ 26 июня 2019

вместо того, чтобы собирать и печатать вот так re.collect.foreach(println)

Вы можете сделать что-то вроде этого ...

val x: Seq[(Int, String, String, String, Int)] = Seq((1999, "2 years", "Master", "IC", 57), (2013,"3 years","Doctorat","SI",44))
    x.map(p => p.productIterator.mkString(",")).foreach(println)

Результат:

1999,2 years,Master,IC,57
2013,3 years,Doctorat,SI,44

или просто вы можете использовать рамки данных для достижения этого результата:

import org.apache.log4j.Level
import org.apache.spark.sql.SparkSession

object TupleTest {
  org.apache.log4j.Logger.getLogger("org").setLevel(Level.ERROR)
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName(this.getClass.getName).config("spark.master", "local").getOrCreate()
    spark.sparkContext.setLogLevel("ERROR")
    import spark.implicits._
    val rdd = spark.sparkContext.parallelize(Seq((1, "Spark"), (2, "Databricks"), (3, "Notebook")))
    val df = rdd.toDF("Id", "Name")
    df.coalesce(1).write.mode("overwrite").csv("./src/main/resouces/single")
  }

}

Результат savad в текстовом файле:

1,Spark
2,Databricks
3,Notebook
0 голосов
/ 26 июня 2019

Другой ответ не учитывает структуру ваших данных.У вас есть (String, Int) кортеж, поэтому вы должны сделать следующее:

}).reduceByKey(_ + _)
re.collect.foreach(println)
}

Для этого:

}).reduceByKey(_ + _).map(x => x._1 + "," + x._2)
re.collect.foreach(println)
}
...