Apache Spark:查询成功率

时间:2017-12-26 15:03:16

标签: sql scala apache-spark spark-dataframe

我刚开始学习SQL和Apache Spark。

我在Spark中导入了一个SQL表。

现在我需要根据需要“是”的字段找到成功率。

所以我需要找到总行数除以具有特定字段的行数'是'

我能够单独找到结果,但不知道如何组合这两个查询。

sqlContext.sql("select count(*) from customers") 

res51: org.apache.spark.sql.DataFrame = [_c0: bigint]

sqlContext.sql("select count(*) from customers where custSub = 'yes'")

res52: org.apache.spark.sql.DataFrame = [_c0: bigint]

我可以使用单个查询查找结果,还是在存储单个查询的结果后需要执行任何操作。

你可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您可以使用条件聚合来执行此操作。

# check_db.py 

import socket
import time
import argparse
""" Check if port is open, avoid docker-compose race condition """

parser = argparse.ArgumentParser(description='Check if port is open, avoid\
                                 docker-compose race condition')
parser.add_argument('--service-name', required=True)
parser.add_argument('--ip', required=True)
parser.add_argument('--port', required=True)

args = parser.parse_args()

# Get arguments
service_name = str(args.service_name)
port = int(args.port)
ip = str(args.ip)

# Infinite loop
while True:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex((ip, port))
    if result == 0:
        print("{0} port is open! Bye!".format(service_name))
        break
    else:
        print("{0} port is not open! I'll check it soon!".format(service_name))
        time.sleep(3)

答案 1 :(得分:0)

使用avg()来获取费率这是一个很好的小技巧:

select avg(case when custSub = 'yes' then 1.0 else 0.0 end) as rate
from customers;