Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在bigquery中使用DBSCAN进行聚类

在bigquery中使用DBSCAN进行聚类
EN

Stack Overflow用户
提问于 2021-08-16 19:49:27
回答 2查看 633关注 0票数 2

我有一个Bigquery表,其中只有一个名为'point‘的列。它包含我希望使用ST_CLUSTERDBSCAN函数在BigQuery中进行聚类的位置坐标。

我使用以下查询:

代码语言:javascript
运行
AI代码解释
复制
SELECT ST_CLUSTERDBSCAN(point, 2000, 200) OVER () AS cluster_num 
FROM mytable

我知道这个错误:

查询执行期间超出的资源:无法在分配的内存中执行查询。峰值使用:上限的128%。顶级内存使用者:分析OVER()子句: 97%其他/未归因: 3%

据我所知,这是因为查询内存密集型。考虑到我的表包含数百万行,我是否可以使用集群数据?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-16 22:58:19

BigQuery中的大多数解析函数目前在单个碎片(机器)上运行一个分区,因此分区大小在内存中限制为1GB左右的数据大小。在您的查询中,OVER ()意味着没有分区-所有数据都在一个分区中运行。

解决方案通常是在某个大粒度上对数据进行分区。例如,如果数据具有某种空间层次结构,则可以按该列进行分区--例如,执行OVER(PARTITION BY state)。当然,这意味着不存在跨态簇,所以结果并不完全相同,但是如果有自然的聚类,这通常是合理的。

如果这种内部层次结构不可用,另一种选择是使用一个短的地散列(只有很少的字母--为了避免资源超出错误而需要的字母)进行分区,类似于OVER(PARTITION BY st_geohash(point, 2))。一个很好的选择是S2_CellIDFromPoint(ST_Centroid(geo, level)),请参阅S2细胞尺寸来选择单元格级别。

票数 3
EN

Stack Overflow用户

发布于 2021-12-15 05:48:01

为了补充迈克尔的答案,我发现的一个问题是,S2网格是规则的,不匹配地面上不同的密度。因此,您最终往往会得到比您想要的更小的分区,这仅仅是因为您必须设置适合于最密集区域的S2级别。在英国,有不同规模的现成电网,我创建了一个100公里和20公里的混合电网,见下文。较小的广场覆盖了较大的城市。

另一种选择是使用六角网格,这是Carto通过jslibs.h3向BiqQuery提供的。

还有许多其他选项,比如递归地划分类似KD树结构的空间,直到最大的剩余输入分区被保证适合在一个碎片上。

根据您想要做的事情,还有一个额外的问题,那就是组合集群,这些集群跨越OVER子句中使用的任何细分。对此有一些解决方案,例如使用ST_Union和ST_Intersects以及合并相邻的集群,但这超出了最初的问题。最终,这就是您希望保持分区尽可能大的原因,但如果您想要这样做的话,它将减少重组集群所需的工作量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68811457

复制
相关文章
【Android 逆向】ELF 文件格式 ( ELF 程序头入口大小 | ELF 程序头入口个数 | ELF 文件节区头入口大小 | ELF 文件节区头入口个数 | 字符表序号 )
ELF 文件头 第 42 ~ 43 字节 : ELF 程序头入口大小 ; 一般是 32 字节 ;
韩曙亮
2023/03/29
1K0
【Android 逆向】ELF 文件格式 ( ELF 程序头入口大小 | ELF 程序头入口个数 | ELF 文件节区头入口大小 | ELF 文件节区头入口个数 | 字符表序号 )
程序一定要从main函数开始运行吗?
每个目标文件都有好多个段,目标文件在被链接成可执行文件时,输入目标文件中的各个段如何被合并到输出文件?
程序员小猿
2021/01/19
1.3K0
程序一定要从main函数开始运行吗?
gcc -E 选项
-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面. 例子用法: gcc -E hello.c > pianoapan.txt gcc -E hello.c | more 慢慢看吧,一个hello word 也要与处理成800行的代码
Java架构师必看
2021/03/22
9680
写一个操作系统_08 内核与C语言
我们开发用户应用程序的时候,有标准库可以用,最典型的就是GUN C库,标准库一般是系统调用的封装,表面上是通过标准库访问系统资源,实际上是通过系统调用实现的。Linux的系统调用一般是先往eax寄存器写入系统调用号,然后通过0x80中断来实现。中断向量号为0x80称为系统中断门,更多的中断参考中断描述符表。
changan
2020/11/04
8280
动态链接的步骤与实现
我们知道动态链接器本身也是一个共享对象,但是事实上它有一些特殊性。对于普通共享对象文件来说,它的重定位工作由动态链接器来完成。他也可以依赖其他共享对象,其中的被依赖共享对象由动态链接器负责链接和装载。可是对于动态链接器来说,它的重定位工作由谁来完成?它是否可以依赖于其他共享对象?
233333
2019/05/25
1.4K0
只有170字节,最小的64位Hello World程序这样写成
机器之心转载 作者:CJ Ting 最简单的 C 语言 Hello World 程序,底层到底发生了什么?如何编写出最小的 64 位 Hello World 程序? Hello World 应该是每一位程序员的启蒙程序,出自于 Brian Kernighan 和 Dennis Ritchie 的一代经典著作 The C Programming Language。 // hello.c#include <stdio.h>int main() { printf("hello, world\n"
机器之心
2023/03/29
5450
只有170字节,最小的64位Hello World程序这样写成
BUUCTF 刷题笔记——PWN 2
先验文件,本题文件为 32 为可执行文件,保护约等于没开。值得注意的是,该文件又是静态链接,因此又可以直接调用一些未被调用过的函数来解题,比如老朋友 mprotect() 函数。
h-t-m
2023/03/10
1.5K0
BUUCTF 刷题笔记——PWN 2
吴章金: 如何创建一个*可执行*的共享库
license: "cc-by-nc-nd-4.0" description: "本文手把手指导如何创建一个可以执行的共享目标文件"
Linux阅码场
2019/11/10
1.2K0
Linux共享库、静态库、动态库详解
1. 介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程
sunsky
2020/08/20
9K0
Linux共享库、静态库、动态库详解
含大量图文解析及例程 | Linux下的ELF文件、链接、加载与库(中)
可执行文件的装载 进程和装载的基本概念的介绍 程序(可执行文件)和进程的区别 程序是静态的概念,它就是躺在磁盘里的一个文件。 进程是动态的概念,是动态运行起来的程序。 现代操作系统如何装载可执行文件 给进程分配独立的虚拟地址空间 将可执行文件映射到进程的虚拟地址空间(mmap) 将CPU指令寄存器设置到程序的入口地址,开始执行 可执行文件在装载的过程中实际上如我们所说的那样是映射的虚拟地址空间,所以可执行文件通常被叫做映像文件(或者Image文件)。 可执行ELF文件的两种视角 可执行ELF格式具有不寻常的
刘盼
2022/08/26
3.4K0
含大量图文解析及例程 | Linux下的ELF文件、链接、加载与库(中)
ROP的基本原理和实战教学,看这一篇就够了!
ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等)。通过上一篇文章栈溢出漏洞原理详解与利用,我们可以发现栈溢出的控制点是ret处,那么ROP的核心思想就是利用以ret结尾的指令序列把栈中的应该返回EIP的地址更改成我们需要的值,从而控制程序的执行流程。
Java程序猿
2023/02/21
3.4K0
linux ldd命令源代码,Linux中ldd命令的用法详解[通俗易懂]
Linux中ldd命令主要用于查看程式运行所需的共享库,那么ldd命令具体要如何使用呢?下面小编就给大家介绍下Linux下ldd命令的使用方法,感兴趣的朋友一起来学习下吧。
全栈程序员站长
2022/08/23
3.5K0
linux ldd命令源代码,Linux中ldd命令的用法详解[通俗易懂]
实战操作系统 loader 编写(下) -- 进军内核
上一篇文章中,我们结合此前已经介绍过的一系列知识,成功的将内核载入内存并进入到了保护模式中。 实战操作系统 loader 编写(上) — 进入保护模式
用户3147702
2022/06/27
4090
实战操作系统 loader 编写(下) -- 进军内核
linux 编译汇编,linux下的汇编教程
第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(www.gnu.org)上下载有关规范。
全栈程序员站长
2022/06/28
3.5K0
Linux命令(65)——ld命令
ld命令是二进制工具集GNU Binutils的一员,是GNU链接器,用于将目标文件与库链接为可执行程序或库文件。
恋喵大鲤鱼
2019/04/18
17.8K0
nox&amp;CSAW部分pwn题解
暑假的时候遇到了一群一起学习安全的小伙伴,在他们的诱劝下,开始接触国外的CTF比赛,作为最菜的pwn选手就试着先打两场比赛试试水,结果发现国外比赛真有意思哎嘿。
安恒网络空间安全讲武堂
2018/10/25
1K0
写一个操作系统_14 C 链接与系统调用
链接可以指定最终生成的可执行文件的起始虚拟地址,我们 指定 内核加载到 0x1500的地方,内核初始化的时候跳转内核要跳转到这个地方。
changan
2020/11/04
4660
动态链接的相关结构
在了解了共享对象的绝对地址的引用问题后,我们基本上对动态链接的原理有了初步的了解,接下来的问题是整个动态链接具体的实现过程了。动态链接在不同的系统上有不同的实现方式。ELF的动态链接的实现方式会比PE的简单一点,在这里我们先介绍ELF的动态链接过程在LINUX下的实现,最后我们会专门的章节中介绍PE在Windows下的动态链接过程和它们的区别
233333
2019/05/25
1.7K0
nox&CSAW部分pwn题解
暑假的时候遇到了一群一起学习安全的小伙伴,在他们的诱劝下,开始接触国外的CTF比赛,作为最菜的pwn选手就试着先打两场比赛试试水,结果发现国外比赛真有意思哎嘿。
安恒网络空间安全讲武堂
2019/09/29
1.1K0
nox&CSAW部分pwn题解
ELF文件的加载过程(load_elf_binary函数详解)--Linux进程的管理与调度(十三)
一种是固定的、静态的连接,就是把需要用到的库函数的目标代码(二进制)代码从程序库中抽取出来,链接进应用软件的目标映像中;
233333
2018/10/09
8.5K0
ELF文件的加载过程(load_elf_binary函数详解)--Linux进程的管理与调度(十三)

相似问题

从加载器跳转到ELF的入口点

156

ELF入口点是否与通常的0x80*?为什么要这么做?

21

更改入口点“主”

25

入口点地址与原入口点有什么不同?

10

链接器(%ld) ELF问题

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档