栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

新的Dataframe列作为其他行的通用功能(火花)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

新的Dataframe列作为其他行的通用功能(火花)

这里的问题是,我不知道一种方法,可以在不首先将值收集到列表中的情况下,告诉spark将当前行与Dataframe中的其他行进行比较。

UDF是不是一种选择,在这里(你不能引用分布

Dataframe
udf
)你的逻辑的直接翻译是笛卡尔乘积和汇总:

from pyspark.sql.functions import levenshtein, colresult = (spark_df.alias("l")    .crossJoin(spark_df.alias("r"))    .where(levenshtein("l.word", "r.word") < 2)    .where(col("l.word") != col("r.word"))    .groupBy("l.id", "l.word")    .count())

但实际上,您应该尝试做一些更有效的事情:ApacheSpark中的有效字符串匹配

根据问题,您应尝试查找其他近似值以避免完整的笛卡尔积。

如果要保留不匹配的数据,则可以跳过一个过滤器:

(spark_df.alias("l")    .crossJoin(spark_df.alias("r"))    .where(levenshtein("l.word", "r.word") < 2)    .groupBy("l.id", "l.word")    .count()    .withColumn("count", col("count") - 1))

或(速度较慢,但​​通用性更高),请参考加入:

(spark_df    .select("id", "word")    .distinct()    .join(result, ["id", "word"], "left")    .na.fill(0))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/653425.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号