Nan*_*ndu 7 apache-spark-sql pyspark spark-dataframe pyspark-sql
我有要求我需要在Hive表中计算SparkSQL中重复行的数量。
from pyspark import SparkContext, SparkConf
from pyspark.sql import HiveContext
from pyspark.sql.types import *
from pyspark.sql import Row
app_name="test"
conf = SparkConf().setAppName(app_name)
sc = SparkContext(conf=conf)
sqlContext = HiveContext(sc)
df = sqlContext.sql("select * from DV_BDFRAWZPH_NOGBD_R000_SG.employee")
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经对表名进行了硬编码,但实际上它是作为参数来的。话虽这么说,我们也不知道列数或它们的名称。在python pandas中,我们有类似df.duplicated.sum()之类的东西来计算重复记录的数量。我们这里有这样的东西吗?
+---+---+---+
| 1 | A | B |
+---+---+---+
| 1 | A | B |
+---+---+---+
| 2 | B | E |
+---+---+---+
| 2 | B | E |
+---+---+---+
| 3 | D | G |
+---+---+---+
| 4 | D | G |
+---+---+---+
Run Code Online (Sandbox Code Playgroud)
此处重复的行数为4。(例如)
pau*_*ult 10
本质上,您想要groupBy()所有列和count(),然后为计数大于1的行选择计数总和。
import pyspark.sql.functions as f
df.groupBy(df.columns)\
.count()\
.where(f.col('count') > 1)\
.select(f.sum('count'))\
.show()
Run Code Online (Sandbox Code Playgroud)
说明
分组和聚合之后,您的数据将如下所示:
+---+---+---+---+
| 1 | A | B | 2 |
+---+---+---+---+
| 2 | B | E | 2 |
+---+---+---+---+
| 3 | D | G | 1 |
+---+---+---+---+
| 4 | D | G | 1 |
+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
然后使用where()仅过滤计数大于1的行,并选择总和。在这种情况下,您将获得前2行,总计为4。
| 归档时间: |
|
| 查看次数: |
5587 次 |
| 最近记录: |