【问题标题】:Spark SQL JSON Boolean EvaluationSpark SQL JSON 布尔求值
【发布时间】:2015-08-03 17:27:39
【问题描述】:

我有示例 JSON Schema(由于大小而被截断):

 |-- LinearScheduleResult: struct (nullable = true)
 |    |-- Build: string (nullable = true)
 |    |-- EndTimestamp: string (nullable = true)
 |    |-- Errors: array (nullable = true)
 |    |    |-- element: string (containsNull = true)
 |    |-- RequestId: string (nullable = true)
 |    |-- Schedule: struct (nullable = true)
 |    |    |-- Airings: array (nullable = true)
 |    |    |    |-- element: struct (containsNull = true)
 |    |    |    |    |-- AiringTime: string (nullable = true)
 |    |    |    |    |-- AiringType: string (nullable = true)
 |    |    |    |    |-- CC: boolean (nullable = true)
 |    |    |    |    |-- CallLetters: string (nullable = true)
 |    |    |    |    |-- Category: string (nullable = true)
 |    |    |    |    |-- Channel: string (nullable = true)
 |    |    |    |    |-- Color: string (nullable = true)
 |    |    |    |    |-- Copy: string (nullable = true)
 |    |    |    |    |-- DSS: boolean (nullable = true)
 |    |    |    |    |-- DVS: boolean (nullable = true)
 |    |    |    |    |-- Dolby: boolean (nullable = true)
 |    |    |    |    |-- Duration: long (nullable = true)
 |    |    |    |    |-- DvbTriplet: string (nullable = true)
 |    |    |    |    |-- EpisodeTitle: string (nullable = true)
 |    |    |    |    |-- HD: boolean (nullable = true)
 |    |    |    |    |-- HDLevel: string (nullable = true)
 |    |    |    |    |-- IconAvailable: boolean (nullable = true)
 |    |    |    |    |-- InstanceId: string (nullable = true)
 |    |    |    |    |-- LetterBox: boolean (nullable = true)
 |    |    |    |    |-- MovieRating: string (nullable = true)
 |    |    |    |    |-- ParentNetworkId: long (nullable = true)
 |    |    |    |    |-- ProgramId: string (nullable = true)
 |    |    |    |    |-- SAP: boolean (nullable = true)
 |    |    |    |    |-- SL: string (nullable = true)
 |    |    |    |    |-- SeriesId: string (nullable = true)
 |    |    |    |    |-- ServiceId: long (nullable = true)
 |    |    |    |    |-- ShowingType: string (nullable = true)
 |    |    |    |    |-- SourceDisplayName: string (nullable = true)
 |    |    |    |    |-- SourceId: long (nullable = true)
 |    |    |    |    |-- SourceLongName: string (nullable = true)
 |    |    |    |    |-- Sports: boolean (nullable = true)

当我执行以下操作时:

results = sqlContext.sql("SELECT LinearScheduleResult.Schedule.Airings.Sports from tv")

返回:

[Row(Sports=[False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False])]

当我做一些更复杂的事情时:

results = sqlContext.sql("SELECT LinearScheduleResult.Schedule.Airings from tv where LinearScheduleResult.Schedule.Airings.Sports = 'False'")

它永远不会返回任何东西,我尝试过 'false'、false、0、FALSE 以及更多组合。

任何帮助将不胜感激。

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    Airings 是一个数组,你需要先炸开行。比如:

    select a from tv 
      lateral view explode(LinearScheduleResult.Schedule.Airings) a as a 
      where a.Sports = false
    

    您必须为此使用 HiveSqlContext。

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView

    【讨论】:

    • 或者你可以下拉到常规的rdd计算
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2012-06-05
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2016-10-22
    相关资源
    最近更新 更多