создать несколько строк из одного ряда в Scala Spark - PullRequest
0 голосов
/ 17 мая 2018

В файле данных или в файле parquet в spark он имеет входные данные, как показано ниже, и должен генерировать несколько строк из одной строки, используя spark scala.Входные данные:

Id    PersonName  Dept  year  Language
1     David       501   2018  English
2     Nancy       501   2018  English 
3     Shyam       502   2018  Hindi

Выходные данные в файле или кадре данных должны быть такими, как показано ниже

1  David 
1  501   2018 
1  David English
2  Nancy 
2  501   2018 
2  Nancy English 
3  Shyam
3  502  2018
3  Nancy Hindi

1 Ответ

0 голосов
/ 17 мая 2018

@ Arvy Я не уверен, почему вы хотели бы сделать это. Ваша таблица должна иметь согласованные столбцы. Однако это можно сделать с помощью простого выбора и объединения.

Pyspark

Создать фрейм данных:

    values = [
        (1, "David", 501, 2018, "English"),
        (2, "Nancy", 501, 2018, "English"),
        (3, "Shyam", 502, 2018, "Hindu"),
    ] 

    df = sqlContext.createDataFrame(values, ['Id', 'PersonName', 'Dept', 'year', 'Language'])

Создать новый фрейм данных:

    from pyspark.sql.functions import lit
    col_names = ["col1", "col2", "col3"]
    df1 = df.select('ID', 'Dept', 'year').toDF(*col_names)
    df2 = df.select('ID', 'PersonName', 'Language').toDF(*col_names)
    df3 = df.select('ID', 'PersonName').withColumn('a', lit('')).toDF(*col_names)

    df_random = df1.union(df2).union(df3).orderBy('col1')
    df_random.show()

Скала

Создать новый фрейм данных:

    import org.apache.spark.sql.{functions, Column, DataFrame, SQLContext}
    val col_names = Seq("col1", "col2", "col3")
    val df1 = df.select("ID", "Dept", "year").toDF(col_names: _*)
    val df2 = df.select("ID", "PersonName", "Language").toDF(col_names: _*)
    val df3 = df.select("ID", "PersonName").withColumn("a", lit("")).toDF(col_names: _*)

    val df_random = df1.union(df2).union(df3).orderBy("col1")
    df_random.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...