Перебирать весь набор данных сразу в Spark? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть большой набор данных с демографическими данными населения в год по стране. Я использую Apache Spark со Scala и Parquet. Структура - один столбец в год (т. Е. «1965»). Я хотел бы иметь возможность выбирать значения строк в наборе.

Вот схема:

columns: Array[String] = Array(country, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010)

Я бы хотел иметь возможность фильтровать мой набор данных на основе уровня населения, независимо от того, какой это год. Например, получить название страны и год, когда население превышает 500

SELECT * FROM table WHERE population > 5000000. 

Result: Cuba, 1962

Как я могу структурировать свой фрейм данных для учета запросов такого типа?

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вам нужно только повернуть стол.

Вот хорошая статья: https://databricks.com/blog/2018/11/01/sql-pivot-converting-rows-to-columns.html

Как развернуть кадр данных: Как развернуть DataFrame?

0 голосов
/ 23 апреля 2019
case class Demographic(country: String,
  population: Long,
  year: Int)

// Creating a strongly-typed dataset.
val dataset = Seq(
  Demographic("US",20*math.pow(10,3).toLong, 1675), 
  Demographic("US", 3*math.pow(10,8).toLong, 2018),
  Demographic("CH", math.pow(10,9).toLong, 2015))
  .toDF.as[Demographic]

// Now filtering is easy using a lambda expression.
dataset.filter(demo => demo.population > 5000)
...