Выбор нескольких столбцов из фрейма данных spark со списком столбцов в качестве начала - PullRequest
0 голосов
/ 09 октября 2018

Предполагая, что у меня есть список столбцов спарк и фрейм данных df искры, каков соответствующий фрагмент кода для выбора подфрейма, содержащего только столбцы в списке?

Что-то похожее на возможно:

var needed_column: List[Column]=List[Column](new Column("a"),new Column("b"))

df(needed_columns)

Я хотел получить имена столбцов, а затем выбрать их, используя следующую строку кода.

К сожалению, имя столбца, похоже, находится только в режиме записи.

df.select(needed_columns.head.as(String),needed_columns.tail: _*)

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Ваш needed_columns имеет тип List[Column], поэтому вы можете просто использовать needed_columns: _* в качестве аргументов для select:

val df = Seq((1, "x", 10.0), (2, "y", 20.0)).toDF("a", "b", "c")

import org.apache.spark.sql.Column

val needed_columns: List[Column] = List(new Column("a"), new Column("b"))

df.select(needed_columns: _*)
// +---+---+
// |  a|  b|
// +---+---+
// |  1|  x|
// |  2|  y|
// +---+---+

Обратите внимание, что select занимает дватипы аргументов:

def select(cols: Column*): DataFrame

def select(col: String, cols: String*): DataFrame

Если у вас есть список имен столбцов типа String, вы можете использовать последний select:

val needed_col_names: List[String] = List("a", "b")

df.select(needed_col_names.head, needed_col_names.tail: _*)

Или вы можете отобразитьсписок от String с до Column с для использования прежнего select

df.select(needed_col_names.map(col): _*)
0 голосов
/ 09 октября 2018

Я понимаю, что вы хотите выбрать только те столбцы из списка (A), которые не являются столбцами данных.У меня есть пример ниже, где я выбираю имя и фамилию, используя отдельный список.проверить это

scala> val df = Seq((101,"Jack", "wright" , 27, "01976", "US")).toDF("id","fname","lname","age","zip","country")
df: org.apache.spark.sql.DataFrame = [id: int, fname: string ... 4 more fields]

scala> df.columns
res20: Array[String] = Array(id, fname, lname, age, zip, country)

scala> val needed =Seq("fname","lname")
needed: Seq[String] = List(fname, lname)

scala> val needed_df = needed.map( x=> col(x) )
needed_df: Seq[org.apache.spark.sql.Column] = List(fname, lname)

scala> df.select(needed_df:_*).show(false)
+-----+------+
|fname|lname |
+-----+------+
|Jack |wright|
+-----+------+


scala>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...