Возьмите имена столбцов из старого фрейма данных в Spark Scala - PullRequest
0 голосов
/ 24 апреля 2020

См. Мой код:

 val spark = SparkSession.builder
      .master("local[*]")
      .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
      .getOrCreate()


    val data = spark.read.option("header", "true")
      .option("inferSchema", "true")
      .csv("src/main/resources/student.csv")

Мои данные выглядят так:

Id   Name  City  
1    Ali   lhr
2    abc   khi
3    xyz   isb

Теперь я создаю новый фрейм данных:

 val someDF = Seq(
      (4,"Ahmad","swl")
    ).toDF("Id", "Name","City")

Здесь вы можете увидеть Я создал новый DataFrame someDF с тем же именем столбца, что и старый DataFrame data. Но я присвоил имена вручную новому DataFrame someDF. Мой вопрос заключается в том, существует ли какой-либо метод, который может взять имена столбцов из старого DataFrame и назначить их новому DataFrame программным способом.

Что-то вроде

val featureCols= data.columns

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

2 способа сделать это - передать массив столбцов в виде переменных, т.е. (data.columns: _ *) & union. ниже приведен полный пример.

  val csv =
    """
      |Id,Name,  City
      |1,Ali,lhr
      |2,abc,khi
      |3,xyz,isb
    """.stripMargin.lines.toSeq.toDS()
//*** Option1***
  val data: DataFrame = spark.read.option("header", true)
    .option("sep", ",")
    .option("inferSchema", true)
    .csv(csv)
  data.show
  val someDF: DataFrame = Seq(
    (4,"Ahmad","swl")
  ).toDF(data.columns:_*)
  someDF.show

  //***Option 2***
  val someDF1: DataFrame = Seq(
    (4,"Ahmad","swl")
  ).toDF
  data.limit(0).union(someDF1).show

Результат:

+---+----+------+
| Id|Name|  City|
+---+----+------+
|  1| Ali|   lhr|
|  2| abc|   khi|
|  3| xyz|   isb|
+---+----+------+

+---+-----+------+
| Id| Name|  City|
+---+-----+------+
|  4|Ahmad|   swl|
+---+-----+------+

+---+-----+------+
| Id| Name|  City|
+---+-----+------+
|  4|Ahmad|   swl|
+---+-----+------+
1 голос
/ 24 апреля 2020

.toDF принимает (colNames: String*), мы можем удалить List[String] в виде строк с :_*

Example:

val featureCols=Seq("Id","Name","City")
val someDF = Seq((4,"Ahmad","swl").toDF(cols:_*)

Seq(("1","2","3")).toDF(featureCols:_*).show()
//+---+----+----+
//| Id|Name|City|
//+---+----+----+
//|  1|   2|   3|
//+---+----+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...