我刚开始学习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]
我可以使用单个查询查找结果,还是在存储单个查询的结果后需要执行任何操作。
你可以帮我解决这个问题吗?
答案 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;