在 Spark 中过滤 Big number 上的数据

Posted

技术标签:

【中文标题】在 Spark 中过滤 Big number 上的数据【英文标题】:filtering data on Big number in Spark 【发布时间】:2020-01-08 13:32:59 【问题描述】:

我有一些包含 json 格式的创建时间的记录。在对数据进行实际工作之前,我想过滤掉在 12 月 31 日晚上 11:59:59 (1577836740000) 之后创建的数据。 但是过滤器查询不适用于这么大的数字。任何关于如何过滤的建议。

我现在做的如下。

 Dataset<Row> testData = rawDataSet.select(cols)
                .filter(col("name").equalTo("dummy string"))
                ...
                ...//Some filter
                ...
                .filter(col("creationTime").gt((1577836740000l)))

虚拟输入:

 [
      
        "name": "a",
        "creationTime": 1577836740000
      ,
      
        "name": "b",
        "creationTime": 1577836720006
      ,
      
        "name": "c",
        "creationTime": 1577836710004
      ,
      
        "name": "d",
        "creationTime": 1577836727006
      ,
      
        "name": "e",
        "creationTime": 1577836740040
      ,
      
        "name": "f",
        "creationTime": 1577836740023
      
      ...
      ...
      ...
    ]

【问题讨论】:

您遇到了什么错误以及数据架构是什么。我已尝试使用您的数据并且它工作正常。请提供更多详细信息。 您使用的 Unix 时间 (1577836740000L) 不是 12 月 31 日 23:59:59,而是 12 月 31 日 23:59:00。在 12 月 31 日 23:59:59 的过滤器中使用 1577816999,这不会给出任何值,因为您的显示日期在 12 月 31 日 23:59:59 之前。 @Nikk 糟糕的是缓存问题 【参考方案1】:

请以以下代码为例

import spark.implicits.

val inputData = ( """[ "name":"vaquar khan","RecordNumber": 2, "Zipcode": 704, "ZipCodeType": "STANDARD", "City": "PASEO COSTA DEL SUR", "State": "PR","name":"Zidan khan", "RecordNumber": 10, "Zipcode": 709, "ZipCodeType": "STANDARD", "City": "BDA SAN LUIS", "State": "PR"] """);

val inputDataDf = spark.read.json(Seq(inputData).toDS)

inputDataDf.show()

scala> inputDataDf.show
+-------------------+------------+-----+-----------+-------+-----------+
|               City|RecordNumber|State|ZipCodeType|Zipcode|       name|
+-------------------+------------+-----+-----------+-------+-----------+
|PASEO COSTA DEL SUR|           2|   PR|   STANDARD|    704|vaquar khan|
|       BDA SAN LUIS|          10|   PR|   STANDARD|    709| Zidan khan|
+-------------------+------------+-----+-----------+-------+-----------+


inputDataDf.filter("Zipcode  not like '704%' ").show

scala>inputDataDf.filter("Zipcode  not like '704%' ").show
+------------+------------+-----+-----------+-------+----------+
|        City|RecordNumber|State|ZipCodeType|Zipcode|      name|
+------------+------------+-----+-----------+-------+----------+
|BDA SAN LUIS|          10|   PR|   STANDARD|    709|Zidan khan|
+------------+------------+-----+-----------+-------+----------+

【讨论】:

以上是关于在 Spark 中过滤 Big number 上的数据的主要内容,如果未能解决你的问题,请参考以下文章

Spark上的Scala [自加入后过滤掉重复的行]

使用 Spark Java 在 Big Query 中写入 Date 数据类型时出现问题

带有包含地图的数组的数据帧上的 Spark 过滤器

HDU 1018 Big Number

有多少数据可以存储在以太坊的 BIG NUMBER 中?网络3

C - Big Number