pyspark间接好友推荐

# 先统计所有可能的对,并且区分是否是直接好友或者间接好友
# 累加
# 过滤
# -*- coding: UTF-8 -*-
from pyspark import SparkContext
def fun1(line):
    result = []
    arrs = str(line).split(" ")
    me = arrs[0]
    for x in range(1, len(arrs)):
        friendA = arrs[x]
        resultA = (me + "_" + friendA, 0) if hash(me) > hash(friendA) else (friendA + "_" + me, 0)
        result.append(resultA)
        for y in range(x + 1, len(arrs)):
            friendB = arrs[y]
            resultB = (friendA + "_" + friendB, 1) if hash(friendA) > hash(friendB) else (friendB + "_" + friendA, 1)
            result.append(resultB)
    return result
def fun2(x):
    flag = False
    t = tuple(x)
    count = 0
    name = t[0]
    Iterable = t[1]
    for y in Iterable:
        if y == 0:
            flag = True
        else:
            count = count + 1
    if flag == True:
        return ("直接好友", 0)
    else:
        return (name, count)
if __name__ == "__main__":
    """
        需求:对本地文件系统URI为:/root/friend.txt 的数据统计间接好友的数量
    """
    # ********** Begin **********#
    sc = SparkContext("local", "pySpark")
    result = sc.textFile("/root/friend.txt").flatMap(fun1).groupByKey().map(fun2).filter(
        lambda x: tuple(x)[1] != 0).collect()
    print(result)
    # ********** End **********#
全部评论

相关推荐

05-15 16:48
上海大学 Java
忙碌的芝士选钝角:招侦探?
点赞 评论 收藏
分享
05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务