小编mdu*_*ant的帖子

任务之间保留的 dask-worker 内存

介绍

我正在使用dask.distributed(令人尴尬的并行任务)并行化一些代码。

  • 我有一个指向不同图像的路径列表,这些图像散布给工作人员。
  • 每个工作人员加载和过滤图像(3D 堆栈)并运行一些过滤。使用 scipy 进行 3D 过滤可节省中间体输出。
  • 每个过滤后的图像在磁盘上保存为 npy 和/或 png。
  • 我在集群上运行之前在本地进行测试,我的设置是:

.

from dask.distributed import Client, LocalCluster
cluster = LocalCluster(n_workers=2, threads_per_worker=1,memory_limit =8e9)
client = Client(cluster)
Run Code Online (Sandbox Code Playgroud)

问题:

  • 当我只处理两个图像(1 个图像/工人)时,一切都很好
  • 当我为每个工作人员散布多个图像时,我会收到此警告,其中进程内存值增加。

.

distributed.worker - WARNING - Memory use is high but worker has no data to store to disk.
Perhaps some other process is leaking memory?  Process memory: 6.21 GB -- Worker memory limit: 8.00 GB
Run Code Online (Sandbox Code Playgroud)

暗示工作人员使用的部分 RAM 不在freed不同文件之间(我猜是剩余的过滤中间体......)

有没有办法在开始处理下一个图像之前释放工人的内存?我必须garbage collector在运行任务之间运行一个循环吗?

编辑 …

python parallel-processing dask dask-distributed

8
推荐指数
1
解决办法
659
查看次数

pydata BLAZE 项目走向何方?

我发现 blaze 生态系统*很棒,因为它涵盖了大多数数据工程用例。在 2015-2016 年期间,这些项目肯定引起了很多兴趣,但最近却被忽视了。我说这是查看 github 存储库上的提交。

所以我对社区的问题是

- 2016 年发生了什么导致失去兴趣的事情?

- 是否有其他基于 Python 的库取代了 blaze?

火焰生态系统:

  • Blaze:查询不同存储系统数据的接口
  • Dask:通过任务调度和阻塞算法进行并行计算
  • Datashape:一种数据描述语言
  • DyND:用于动态多维数组的 C++ 库
  • Odo:不同存储系统间的数据迁移

参考资料:http : //blaze.pydata.org/

blaze datashape dask odo

7
推荐指数
1
解决办法
553
查看次数

如何清除pyqt QTableWidget?

我想清除我的QTableWidget.

首先,我在qcombobox中选择一个用户,然后单击一个qpushbutton并从数据库记录中填充它; 当我选择其他用户时,我点击qpushbutton添加数据我尝试清除:

self.tableFriends.clear()
Run Code Online (Sandbox Code Playgroud)

数据消失但行仍然存在.

我填写的代码是:

def getFriends(self):
    id_us = self.cbUser.itemData(self.cbUser.currentIndex()).toPyObject()
    rowIndex = 0
    self.tableFriends.clear()
    for row in self.SELECT_FRIENDS(id_us):
        self.tableFriends.insertRow(rowIndex)
        for column in range(0,3):
            newItem = QtGui.QTableWidgetItem(str(row[column]).decode('utf-8'))
            self.tableFriends.setItem(rowIndex,column,newItem)
        rowIndex = rowIndex + 1
Run Code Online (Sandbox Code Playgroud)

pyqt qtablewidget python-2.7

6
推荐指数
1
解决办法
1万
查看次数

如何在python splunk查询中规避100个条目的限制

通过splunk SDK执行查询时,显然会在100个条目后剪切结果.如何绕过这个限制?

我试过了:

>job = service.jobs.create(qstring,max_count=0, max_time=0, count=10000)
>while not job.is_ready():
    time.sleep(1)
>out = list(results.ResultsReader(job.results()))
>print(len(out))
100
Run Code Online (Sandbox Code Playgroud)

但是,splunk Web界面中的相同查询会产生超过100行结果.

python splunk

5
推荐指数
1
解决办法
1487
查看次数

非交互式访问谷歌云存储

我想仅使用http 调用(例如,使用curl)对谷歌云存储API 进行经过身份验证的调用。

使用 Google 开发控制台,我启用了 API 并下载了三组已创建的凭据信息。这些信息 JSON 文件具有以下字段:

  • “已安装”字段内的 ['token_uri'、'client_secret'、'client_id'、'auth_uri'、'project_id'、'auth_provider_x509_cert_url'、'redirect_uris']
  • ['token_uri'、'client_email'、'client_id'、'client_x509_cert_url'、'auth_uri'、'project_id'、'类型'、'auth_provider_x509_cert_url'、'private_key'、'private_key_id']
  • “已安装”字段内的 ['project_id'、'token_uri'、'client_id'、'auth_provider_x509_cert_url'、'auth_uri']

我需要拨打什么顺序的电话?可以假设用户名/密码可供有权访问数据存储的用户使用。

(我相信这必须记录在此处或其他地方,但我没有找到任何东西。)

python curl oauth-2.0 google-cloud-storage google-oauth

5
推荐指数
1
解决办法
323
查看次数

Spark的int96时间类型

在spark中创建时间戳列并保存到镶木地板时,会得到一个12字节的整数列类型(int96); 我收集的数据分为6个字节的Julian日和6个字节的纳秒,在一天内.

这不符合任何镶木地板逻辑类型.然后,镶木地板文件中的模式不会指示列是除整数之外的任何内容.

我的问题是,Spark如何知道将这样的列加载为时间戳而不是大整数?

datetime apache-spark parquet

5
推荐指数
1
解决办法
4926
查看次数

在 aarch64 上运行 32 位 elf

我已经在 qemu 64 位 ARM 上安装了 Debian(遵循本教程

uname -a
Run Code Online (Sandbox Code Playgroud)

Linux 测试 4.9.0-7-arm64 #1 SMP Debian 4.9.110-1 (2018-07-05) aarch64 GNU/Linux

我正在尝试在其上运行 32 位 elf 文件,但有些可以工作,有些则不能:

bash: ./file_2: 无法执行二进制文件: Exec 格式错误

在运行的文件上运行 file 命令,我得到:

file_1:ELF 32 位 LSB 可执行文件,ARM,EABI4 版本 1 (SYSV),静态链接,未剥离

以及不运行的:

file_2:ELF 32 位 LSB 可执行文件,ARM,版本 1 (ARM),静态链接,已剥离

并且都可以在32位系统上工作(armv7l)

唯一的区别是 SYSV/ARM 版本。

有没有无需重新编译内核的解决方法?(阅读这篇文章

arm qemu elf arm64

5
推荐指数
1
解决办法
3696
查看次数

Dask read_csv-在`pd.read_csv` /`pd.read_table`中发现不匹配的dtypes

我正在尝试使用dask读取csv文件,它给了我如下错误。但问题是我要我ARTICLE_ID成为object(string)。有人可以帮助我成功读取数据吗?

追溯如下:

ValueError: Mismatched dtypes found in `pd.read_csv`/`pd.read_table`.

+------------+--------+----------+

| Column     | Found  | Expected |

+------------+--------+----------+

| ARTICLE_ID | object | int64    |

+------------+--------+----------+

The following columns also raised exceptions on conversion:

ARTICLE_ID:


ValueError("invalid literal for int() with base 10: ' July 2007 and 31 March 2008. Diagnostic practices of the medical practitioners for establishing the diagnosis of different types of EPTB were studied. Results: For the diagnosi\\\\'",)

Usually this is due to dask's dtype …
Run Code Online (Sandbox Code Playgroud)

python dataframe dask

5
推荐指数
1
解决办法
3260
查看次数

为什么在使用 dask 时 zarr 的性能比镶木地板好得多?

当我使用 dask 对 zarr 数据和 parquet 数据运行基本相同的计算时,基于 zarr 的计算明显更快。为什么?可能是因为我在创建镶木地板文件时做错了什么?

我在 jupyter notebook 中用虚假数据(见下文)复制了这个问题,以说明我所看到的行为类型。我很感激任何人对为什么基于 zarr 的计算比基于镶木地板的计算快几个数量级的见解。

我在现实生活中使用的数据是地球科学模型数据。特定的数据参数并不重要,但可以将每个参数视为具有纬度、经度和时间维度的数组。

要生成 zarr 文件,我只需写出我的参数及其维度的多维结构。

为了生成镶木地板,我首先将 3-D 参数数组“展平”为一个 1-D 数组,它成为我数据框中的单列。然后我添加纬度、经度和时间列,然后将数据框写为镶木地板。


此单元格具有其余代码所需的所有导入:

import pandas as pd
import numpy as np
import xarray as xr
import dask
import dask.array as da
import intake
from textwrap import dedent
Run Code Online (Sandbox Code Playgroud)

该单元生成假数据文件,总大小超过 3 GB:

def build_data(lat_resolution, lon_resolution, ntimes):
    """Build a fake geographical dataset with ntimes time steps and 
       resolution lat_resolution x lon_resolution"""
    lats = np.linspace(-90.0+lat_resolution/2,
                       90.0-lat_resolution/2,
                       np.round(180/lat_resolution))
    lons = np.linspace(-180.0+lon_resolution/2,
                       180-lon_resolution/2,
                       np.round(360/lon_resolution)) …
Run Code Online (Sandbox Code Playgroud)

python dask intake

5
推荐指数
1
解决办法
1166
查看次数

关闭 dask 客户端警告

我的 Jupyter Notebook 输出中出现 Dask 客户端垃圾邮件警告。有没有办法关闭 dask 警告?

警告文本如下所示:“distributed.worker - 警告 - 内存使用率很高,但工作人员没有数据可存储到磁盘。也许其他进程正在泄漏内存?进程内存:3.16 GB -- 工作人员内存限制:4.20 GB”

问题出现在这些代码之后:

import pandas as pd
from sqlalchemy import create_engine, MetaData
from sqlalchemy import select, insert, func
import dask.dataframe as dd

from dask.distributed import Client
client = Client(n_workers=4, threads_per_worker=4, processes=False)

engine = create_engine(uri)
meta_core = MetaData()
meta_core.reflect(bind=engine)

table = meta_core.tables['table']

dd_main = dd.read_sql_table(
    table=table,
    uri=uri,
    index_col='id'
)

dd_main.head()
Run Code Online (Sandbox Code Playgroud)

执行上面的块后,我在每个 Jupyter 单元格中都会收到很多这样的警告,所以我什至找不到我的实际输出。

python dask jupyter-notebook

4
推荐指数
2
解决办法
1033
查看次数

scipy中正态均值的数值积分

当集成普通的pdf时,我从scipy integrate.quad函数得到了一些奇怪的输出.这是我正在尝试使用的代码:

inpdf = lambda c: norm.pdf(50, loc=c, scale = 1)
result = integrate.quad(inpdf, -np.inf, np.inf)
print result
Run Code Online (Sandbox Code Playgroud)

哪个返回(3.281718223506531e-99,0.0)这显然是错误的.当我将x值更改为0时,在下面的代码段中,我得到了适当的输出:

inpdf = lambda c: norm.pdf(0, loc=c, scale = 1)
result = integrate.quad(inpdf, -np.inf, np.inf)
print result
Run Code Online (Sandbox Code Playgroud)

返回(0.9999999999999998,1.0178191320905743e-08)非常接近1,这应该是什么.使用R的积分函数完全相同的事情,所以这可能只是正交算法的一个已知属性?有谁知道为什么会这样?

python numpy r scipy numerical-integration

2
推荐指数
1
解决办法
225
查看次数

异步 Xarray 写入 Zarr

全部。我正在使用 Dask 分布式集群在循环内编写 Zarr+Dask 支持的 Xarray 数据集,并且dataset.to_zarr正在阻塞。当存在阻碍循环继续的散乱块时,这确实会减慢速度。有没有办法.to_zarr异步执行,以便循环可以继续下一个数据集写入而不会被一些落后的块所阻碍?

dask python-xarray zarr

2
推荐指数
1
解决办法
380
查看次数

顺序搜索算法

大家好,我在为二维int数组创建顺序搜索算法时遇到了麻烦.我不确定如何去扩充while循环所以它的工作原理,我正在使用的例子确实是我写出来的,因为你可以看到我的编译器抱怨与其写出的方式不兼容!

  import java.util.*;
      import javax.swing.*;
      public class pencilneck
  {
    public static void main(String []alex)
  {
  int ROWS = 6;
  int COLS = 3;
  int[][] chargeAcc = new int[ROWS][COLS];
  Scanner keyboard = new Scanner(System.in);

  for(int row = 0; row < ROWS; row++)
     {
        for(int col = 0; col < COLS; col++)
        {
           System.out.print("Enter Account");
           chargeAcc[row][col] = keyboard.nextInt();
        }
     }

     System.out.print("Enter an account to be Charged");
     int input = keyboard.nextInt();
     int results = SequentialSearch(chargeAcc,input);

     if(results ==-1)
     {
        System.out.println("that is an invalid #"); …
Run Code Online (Sandbox Code Playgroud)

java arrays

0
推荐指数
1
解决办法
573
查看次数