在Spark中一次遍历整个数据集?

时间:2019-04-23 01:05:36

标签: apache-spark hadoop apache-spark-sql parquet

我有一个大数据集,其中包含每个国家/地区每年的人口统计数据。我正在将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 个答案:

答案 0 :(得分:0)

您只需要旋转桌子。

这是一篇好文章: https://databricks.com/blog/2018/11/01/sql-pivot-converting-rows-to-columns.html

如何旋转数据框: How to pivot DataFrame?

答案 1 :(得分:-1)

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)