Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Join Spark SQL查询将Groupby更改为Spark数据帧_Python - Fatal编程技术网

Python 使用Join Spark SQL查询将Groupby更改为Spark数据帧

Python 使用Join Spark SQL查询将Groupby更改为Spark数据帧,python,Python,我最初使用Spark SQL编写脚本,但现在出于性能和其他原因,我尝试将SQL查询转换为PySpark数据帧 我有订单表(订单ID、客户ID、员工ID、订单日期、发货日期) 和托运人表(托运人、托运人姓名) My Spark SQL查询列出了每个发货人发送的订单数量: sqlContext.sql("SELECT Shippers.ShipperName, COUNT(Orders.ShipperID) AS NumberOfOrders FROM Orders LEFT JOIN Shi

我最初使用Spark SQL编写脚本,但现在出于性能和其他原因,我尝试将SQL查询转换为PySpark数据帧

我有
订单
(订单ID、客户ID、员工ID、订单日期、发货日期)
托运人
(托运人、托运人姓名)

My Spark SQL查询列出了每个发货人发送的订单数量:

 sqlContext.sql("SELECT Shippers.ShipperName, COUNT(Orders.ShipperID) AS NumberOfOrders 
 FROM Orders LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID 
 GROUP BY ShipperName")
现在,当我尝试用Spark Dataframe替换上面的SQL查询时,我编写了以下代码

Shippers.join(Orders,["ShipperID"],'left').select(Shippers.ShipperName).groupBy(Shippers.ShipperName).agg(count(Orders.ShipperID).alias("NumberOfOrders")) 
但我在这里遇到了一个错误,主要是因为我觉得聚合计数函数在从Orders表中查找orderId的计数时是错误的

下面是我得到的错误:-

"An error occurred while calling {0}{1}{2}.\n".format(target_id, ".", name), value)"

有人能帮我把上面的SQL查询重构成Spark Dataframe吗?

下面是pyspark操作,回答您的问题:

import pyspark.sql.functions as F

Shippers.alias("s").join(
    Orders.alias("o"),
    on = "ShipperID",
    how = "left"
).groupby(
    "s.ShipperName"
).agg(
    F.count(F.col("o.OrderID")).alias("NumberOfOrders")
).show()

谢谢但是我希望从发货人到订单表的左连接发生。在聚合计数函数中的另一件事是,我们可以包括订单表来引用OrderID。类似于
F.count(F.col(“Orders.OrderID”)。别名(“NumberOfOrders”)
。我之所以问这个问题,是因为在我的实际问题中,我想要执行计数操作的列存在于我尝试加入的两个表中。请确保在几分钟内添加更改。我已根据以前的注释编辑了原始问题。新的解决方案对您有帮助吗?我得到了相同的错误
/opt/mapr/spark/spark2/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py in get_return_value(应答、网关_客户端、目标_id、名称)318“调用{0}{1}{2}时出错。\n-->319格式(目标id,“.”,名称),值)320其他: