我有一个大数据集,其中包含每个国家/地区每年的人口统计数据。我正在将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
如何构造数据框架以允许此类查询?
答案 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)