需要在spark sql中找到组合键的最新记录

时间:2018-11-16 03:55:38

标签: python sql pyspark pyspark-sql

我需要根据日期查找full_national_number的最新记录。有人可以建议解决方案吗?

我的数据是

+--------------------+-----------------------+----------+ |full_national_number|derived_sequence_number| ts| +--------------------+-----------------------+----------+ | A00000001 | 0000|1111-11-11| | A00000001 | 0001|1111-11-11| | A00000001 | 0002|1111-11-11| | A00000002 | 0000|1111-11-11| | A00000002 | 0001|1111-11-11| | A00000002 | 0002|1111-11-11| | A00000003 | 0000|1111-11-11| | A00000003 | 0001|1111-11-11| | A00000004 | 0000|1111-11-11| | A000000010 | 0000|1111-11-11| | A000000011 | 0000|1111-11-11| | A00000008 | 0000|2018-11-16| | A00000008 | 0001|2018-11-16| | A00000008 | 0002|2018-11-16| | A00000002 | 0000|2018-11-16| | A00000003 | 0000|2018-11-16| | A00000004 | 0000|2018-11-16| | A00000005 | 0000|2018-11-16| +--------------------+-----------------------+----------+

我的预期输出应该是

+--------------------+-----------------------+----------+
|full_national_number|derived_sequence_number|        ts|
+--------------------+-----------------------+----------+
|    A00000001       |                   0000|1111-11-11|
|     A00000001      |                   0001|1111-11-11|
|    A00000001       |                   0002|1111-11-11|
|    A00000002       |                   0000|2018-11-16|
|    A00000003       |                   0000|2018-11-16|
|    A00000004       |                   0000|2018-11-16|
|    A00000005       |                   0000|2018-11-16|
|    A00000008       |                   0000|2018-11-16|
|    A00000008       |                   0001|2018-11-16|
|    A00000008       |                   0002|2018-11-16|
|   A000000010       |                   0000|1111-11-11|
|   A000000011       |                   0000|1111-11-11|
+--------------------+-----------------------+----------+

我尝试了以下选项,但出现错误。

  

sqlContext.sql(“选择完整的国家编号,派生的序列号,   来自(select *,to_date('1111-11-11')的max(ts)作为t1联合的ts全部   从* 2中选择*,current_date)联合分组依据   full_national_number“)。show()

我得到的错误是

  

回溯(最近通话最近):
  (模块)文件“ /opt/cloudera/parcels/CDH-5.14.4-1.cdh5.14.4.p0.3/lib/spark/python/pyspark/sql/context.py”中的文件“”,第1行,   第580行,在sql中       返回DataFrame(self._ssql_ctx.sql(sqlQuery),self)
  文件“ /opt/cloudera/parcels/CDH-5.14.4-1.cdh5.14.4.p0.3/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”,第1257行,在致电
  文件“ /opt/cloudera/parcels/CDH-5.14.4-1.cdh5.14.4.p0.3/lib/spark/python/pyspark/sql/utils.py”,   第51行,在装饰中       引发AnalysisException(s.split(':',1)[1],stackTrace)pyspark.sql.utils.AnalysisException:u“表达式   “ derived_sequence_number”在分组依据中不存在,也不存在   它是一个聚合函数。添加到分组依据或包装在first()中(或   first_value)如果您不在乎获得哪个值。“”

请为我建议一个解决方案。

1 个答案:

答案 0 :(得分:1)

我认为这将为您带来所需的结果。只需粘贴SQL查询:

Amazon EC2
 Ubuntu 16.04
 Nix, Postgresql installed

让我知道这是否有帮助。