как установить подмножество данных из данных - PullRequest
0 голосов
/ 03 июля 2018

Я хочу установить подкадр данных из df, сгенерированного из паркетных файлов

+----+-----+----------+-----+-----------------+-----+-----------+-----+
|year|state|count1    |rowId|count2           |rowId|count3     |rowId|
+----+-----+----------+-----+-----------------+-----+-----------+-----+
|2014|   CT|    343477|    0|           343477|    0|     343477|    0|
|2014|   DE|    123431|    1|           123431|    1|     123431|    1|
|2014|   MD|    558686|    2|           558686|    2|     558686|    2|
|2014|   NJ|    773321|    3|           773321|    3|     773321|    3|
|2015|   CT|    343477|    4|           343477|    4|     343477|    4|
|2015|   DE|    123431|    5|           123431|    5|     123431|    5|
|2015|   MD|    558686|    6|           558686|    6|     558686|    6|

Я хочу сохранить один столбец "rowId" и удалить другие столбцы "rowId", а также сделать столбец rowId первым столбцом:

    +----+-----+----------+-----+-----------------+
    rowId||year|state|count1    |count2 |count3   |
    +----+-----+----------+-----+-----------------+-
        0|2014|   CT|    343477|  343477|   343477|
        1|2015|   DE|    123431|  123431|   123431|
        2|2015|   MD|    558686|  558686|   558686|
        3|2015|   NJ|    773321|  773321|   773321|
        4|2015|   CT|    343477|  343477|   343477| 
        5|2015|   DE|    123431|  123431|   123431|
        6|2015|   MD|    558686|  558686|   558686| 

Мои попытки:

 df.createOrReplaceTempView("test")
 val sqlDF = spark.sql("SELECT rowId, year, state, count1, count2, count3 from test)

Я получил ошибку: org.apache.spark.sql.AnalysisException: Ссылка 'rowId' неоднозначна, может быть: rowId # 3356L, rowId # 3368L, rowId # 3378L, rowId # 3388L, rowId # 3398L, rowId # 3408L , как я это сделал? Спасибо ...

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете отобразить столбцы на основе индекса следующим образом

df.map(attributes => 
               (attributes.getInt(3),  
                attributes.getInt(0),
                attributes.getString(1),
                attributes.getInt(2),
                attributes.getInt(4), 
               attributes.getInt(6))).
toDF("rowId", "year", "state", "count1", "count2", "count3").show()

Не стесняйтесь изменять вышеприведенное утверждение в зависимости от типа данных вашего столбца.

...