代码之家  ›  专栏  ›  技术社区  ›  gogasca

在BigQuery中使用最大值展平结果

  •  0
  • gogasca  · 技术社区  · 5 年前

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

    我想展平我的结果,但现在使用这个查询,我只得到上面的表,并使用bigQuery Python client得到一个: [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`
    
          ))
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Tlaquetzal    5 年前

    你的 probabilities 字段是重复记录,即结构数组。可以使用子查询遍历数组并选择最大概率,如下所示:

    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`
    
          ))
    

    结果如下:

    flattened results

    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 dict。

    BigQuery quickstart 有关客户端库的详细信息。