当前位置: 首页 > 知识库问答 >
问题:

通过Python用Spark准备我的bigdata

周良弼
2023-03-14

我的100米大小,量化数据:

(1424411938', [3885, 7898])
(3333333333', [3885, 7898])

期望的结果:

(3885, [3333333333, 1424411938])
(7898, [3333333333, 1424411938])
def prepare(data):
    result = []
    for point_id, cluster in data:
        for index, c in enumerate(cluster):
            found = 0
            for res in result:
                if c == res[0]:
                    found = 1
            if(found == 0):
                result.append((c, []))
            for res in result:
                if c == res[0]:
                    res[1].append(point_id)
    return result
(3885, [3333333333])
(7898, [3333333333])
(3885, [1424411938])
(7898, [1424411938])
data = []
from random import randint
for i in xrange(0, 10):
    data.append((randint(0, 100000000), (randint(0, 16000), randint(0, 16000))))
data = sc.parallelize(data)

共有1个答案

法风畔
2023-03-14

您可以使用一系列基本的pyspark转换来实现这一点。

>>> rdd = sc.parallelize([(1424411938, [3885, 7898]),(3333333333, [3885, 7898])])
>>> r = rdd.flatMap(lambda x: ((a,x[0]) for a in x[1]))

我们使用FlatMapx[1]中的每个项设置键值对,并将数据行格式更改为(a,x[0]),这里的ax[1]中的每个项。为了更好地理解FlatMap,您可以查看文档。

>>> r2 = r.groupByKey().map(lambda x: (x[0],tuple(x[1])))

我们只是将所有键、值对按键分组,并使用tuple函数将iterable转换为tuple。

>>> r2.collect()
[(3885, (1424411938, 3333333333)), (7898, (1424411938, 3333333333))]

我尽量解释清楚。我希望这能有所帮助。

 类似资料:
  • Python标准库是Python强大的动力所在,我们已经在前文中有所介绍。由于标准库所涉及的应用很广,所以需要学习一定的背景知识。 硬件原理 这一部份需要了解内存,CPU,磁盘存储以及IO的功能和性能,了解计算机工作的流程,了解指令的概念。这些内容基础而重要。 Python标准库的一部份是为了提高系统的性能(比如mmap),所以有必要了解基本的计算机各个组成部分的性能。 操作系统 在了解操作系统时

  • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 在穿越PHP:数据对象的丛林中,我遇到了通过准备好的语句执行MySQL查询的问题。 观察以下代码: 这就是我,我想进入我的数据库。但是我一直迷路在..好吧..我不知道!根据谷歌,这是做到这一点的方法,尽管我的数据库仍然是空的。 我在这里想念什

  • 问题内容: 我要执行以下mysql查询: 我尝试了一下但没有成功: 因此,我问您是否可以在准备好的语句中使用%通配符。 /编辑 谢谢。其与: 问题答案: 它也可以通过以下方式与绑定参数一起使用:

  • 本书大部分篇幅会用来关注MongoDB的核心功能。所以我们基本上使用的是MongoDB的外壳(shell)。shell在学习MongoDB还有管理数据库的时候很有用,不过您的实际代码还是会用相应的语言来驱动mongoDB的。 这也引出了关于MongoDB您首先需要了解的东西:它的驱动。MongoDB有许多针对不同语言的官方驱动。可以认为这些驱动和您所熟知的各种数据库驱动是一样的。基于这些驱动,Mo

  • 先去准备,下载,安装几个东西。 命令行 使用 Vagrant,几乎都是在命令行下进行的,所以你需要先准备一个命令行界面。Windows 用户我推荐使用完整版的 cmder,macOS 用户可以使用系统自带的终端(Terminal)。 Windows 下载 cmder: https://github.com/cmderdev/cmder 虚拟机 选择一款虚拟机软件,Virtualbox,VMWare

  • 学习 CentOS,你需要一台安装了这种操作系统的机器,可以是一台真正的服务器,也可以是在本地电脑上创建的一台 CentOS 的虚拟机。Vagrant 入门教程 这本书里介绍了在本地管理虚拟机的方法。 虚拟机 创建一台 CentOS 系统的虚拟机。打开命令行,执行: cd ~/desktop mkdir wenjiangs-centos cd wenjiangs-centos vagrant