首页 > 解决方案 > 在 BigQuery 中使用 MAX 值展平结果

问题描述

我需要用最大数字展平结果中的概率列:

original predicted probabilities
 <=50K   >50K      >50K 0.5377828170971353
                   <=50K 0.46221718290286473
 <=50K   <=50K     >50K 0.05434716579642335
                   <=50K 0.9456528342035766

我想展平我的结果,但现在使用这个查询我只是得到上面的表并使用 bigQuery Python 客户端得到:[object Object],[object Object]

    SELECT
      original,
      predicted,
      probabilities
    FROM
      ML.PREDICT(MODEL `my_dataset.my_model`,
      (
      SELECT
        *
      FROM   
       `bigquery-public-data.ml_datasets.census_adult_income`

      ))

标签: google-cloud-platformgoogle-bigquery

解决方案


您的probabilities字段是 REPEATED RECORD,即结构数组。您可以使用子查询来遍历数组并选择最大概率,如下所示:

SELECT 
    original,
    predicted, 
    (SELECT p 
         -- Iterate over the array
         FROM UNNEST(probabilities) as p 
         -- Order by probability and get the first result
         ORDER BY p.prob DESC
         LIMIT 1) AS probabilities
  FROM
      ML.PREDICT(MODEL `my_dataset.my_model`,
      (
      SELECT
        *
      FROM   
       `bigquery-public-data.ml_datasets.census_adult_income`

      ))

结果将如下所示:

扁平化结果

你得到的 python 结果看起来更像是一个对象的 javascript 表示。这是我在python中的做法:

from google.cloud import bigquery

client = bigquery.Client()

# Perform a query.
sql = ''' SELECT ... ''' # Your query 

query_job = client.query(sql)

rows = query_job.result()  # Waits for query to finish

for row in rows:
    print(row.values())

输出:

(' >50K', ' >50K', {'label': ' >50K', 'prob': 0.5218586871072727})
(' >50K', ' >50K', {'label': ' >50K', 'prob': 0.5907989087876587})
(' >50K', ' >50K', {'label': ' >50K', 'prob': 0.734145221825564})

请注意,概率是 BigQuery SQL 中的结构数据类型,因此它映射为 python 字典。

查看BigQuery 快速入门,了解有关客户端库的更多信息。


推荐阅读