小编Use*_*d82的帖子

比较2个数据集可能与并发/异步/并行方法

我目前正在尝试改进现有的机制(比较来自2个源的数据,在perl5中实现),并且想要使用perl6.

在未压缩的平面文件中,我的目标数据量范围约为20-30 GB.就行而言,文件可以包含1800万到2800万行.它每行大约有40-50列.

我每天都会进行这种类型的数据协调,从文件中读取并填充哈希值大约需要10分钟.花了大约20分钟来读取这两个文件并填充哈希值.

比较过程大约需要30-50分钟,包括迭代哈希,收集所需的结果,以及写入输出文件(csv,psv).

总而言之,在具有256GB RAM(包括间歇性服务器负载)的32核双xeon cpu服务器上执行此过程可能需要30分钟到60分钟之间的任何时间.

现在我想进一步降低总处理时间.

这是我目前使用perl5的单线程方法.

  1. 从2个源(比如s1和s2)中逐个获取数据,并根据键值对填充哈希值.数据源可以是平坦的csv或psv文件,也可以是数据库查询Array of Array结果,通过DBI客户端.数据始终未分类.
  2. 具体来说,我逐行读取文件,拆分字段,并为键,值对选择所需的索引并插入哈希.
  3. 在收集数据并用所需的键/值对填充哈希之后,我开始比较并收集结果(主要比较s2和s1中缺少或不同的内容,反之亦然).
  4. 在excel文件中转储输出(如果没有大约100万或更大的行,则非常昂贵)或简单的CSV(廉价操作.首选方法).

我想知道我是否可以以某种方式并行执行第一步,即同时从两个源收集数据并填充我的全局哈希,然后继续比较和转储输出?

perl6可以提供哪些选项来处理这种情况?我已经阅读了有关使用perl6的并发,异步和并行操作,但我不确定哪一个可以帮助我.

我非常感谢有关此事的任何一般性指导.我希望我能很好地解释我的问题,但遗憾的是我没有太多东西可以证明我到现在为止做了什么?原因是我刚刚开始解决这个问题.我只是无法看到过去的单线程方法,需要一些帮助.

谢谢.

编辑

由于我现有的问题陈述被社区视为"过于宽泛" - 请允许我尝试突出以下的难点:

  1. 如果可能的话,我想利用所有32个内核进行文件比较.我只是无法提出策略或初步想法.
  2. 为了解决这个问题或问题类型,perl6可以使用或适用哪种新技术.
  3. 如果我产生2个进程来读取文件并收集数据 - 是否可以将结果作为数组或哈希返回?
  4. 是否可以并行比较数据(存储在哈希中)?

我目前的p5比较逻辑如下所示,供您参考.希望这有帮助,不要让这个问题关闭.

package COMP;

use strict;
use Data::Dumper;


sub comp 
{
  my ($data,$src,$tgt) = @_; 
  my $result = {};

  my $ms    = ($result->{ms} = {});
  my $mt    = ($result->{mt} = {});
  my $diff  = ($result->{diff} = {}); …
Run Code Online (Sandbox Code Playgroud)

comparison performance cpu-cores perl6 raku

11
推荐指数
1
解决办法
257
查看次数

perl6的stat函数

在perl6中是否有另一种方法来获取文件属性详细信息,如size,access_time,modified_time等,而无需调用本机调用?

根据文档,它" 不太可能像POSIX特定的那样被内置实现 ".

除了系统调用stat之外,还有哪些可用的解决方法?

任何想法或指针都非常感激.

谢谢.

stat perl6 file-attributes

9
推荐指数
1
解决办法
210
查看次数

了解 C++ 中地图和向量的 typeid.name() 输出

typeid.name()有人可以帮助更好地理解地图和矢量的输出吗?请在下面找到我的程序及其输出。

例如:输出 for std::map<int,int>出现到TYPE is: [St3mapIiiSt4lessIiESaISt4pairIKiiEEE]我能够破译一点的地方,即映射forstd::map当然,Iii为 theint,int但其余字符是什么意思?

程序:

#include <iostream>
#include <map>
#include <vector>
#include <typeinfo>

using namespace std ;

template <class A>
void showtype (A x)
{
        cout<<"TYPE is: ["<<typeid(x).name()<<"]\n" ;
}

int main()
{
        std::map<int,int> iM ;                  showtype(iM) ;
        std::map<int,std::string> isM ;         showtype(isM) ;
        std::map<std::string,std::string> ssM ; showtype(ssM) ;
        std::vector<std::string> sV ;           showtype(sV) ;
        std::vector<int> iV ;                   showtype(iV) ;
        return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

输出:

%_Host@User> ./typeid.name …
Run Code Online (Sandbox Code Playgroud)

c++ maps vector typeid

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

perl sysopen可以打开文件进行原子写入吗?

在阅读APUE(第3版)一书时,我遇到了开放系统调用及其让用户打开文件进行write原子操作的能力,O_APPEND模式意味着,多个进程可以写入文件描述符并且内核确保将数据写入到单个文件由多个进程组成,不重叠,所有行都完好无损.

在使用C/C++程序成功进行开放式系统调用试验后,我能够对其进行验证,并且就像书中描述的那样工作.我能够启动多个写入单个文件的进程,并且所有行都可以计算到它们的进程PID.

我希望与perl一起观察相同的行为sysopen,因为我在工作中有一些可以从这种行为中受益的任务.尝试了,但实际上没有用.当我分析输出文件时,我能够看到竞争条件的迹象(可能),因为有很多次交错行.

问题:perl sysopen调用与linux的开放系统调用不一样吗?是否有可能通过多个进程将单一文件的这种类型的原子写操作实现?

编辑:添加C代码和用于测试的perl代码.

C/C++代码

int main(void)
{
  if ((fd = open("outfile.txt",O_WRONLY|O_CREAT|O_APPEND)) == -1) { 
    printf ("failed to create outfile! exiting!\n");
    return -1;
  }

  for (int counter{1};counter<=MAXLINES;counter++)
  { /* write string 'line' for MAXLINES no. of times */
    std::string line = std::to_string(ACE_OS::getpid())
      + " This is a sample data line ";
    line += std::to_string(counter) + " \n";
    if ((n = write(fd,line.c_str(),strlen(line.c_str()))) == -1) {
      printf("Failed to write to outfile!\n";
    }
  } …
Run Code Online (Sandbox Code Playgroud)

linux perl atomic file-descriptor system-calls

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

如何从谷歌存储中保存的镶木地板文件创建 pandas 数据框

我需要使用托管在谷歌云存储桶上的镶木地板文件使用 pandas 库创建数据框架。我搜索了文档和在线示例,但似乎不知道如何进行。

您能帮助我指出正确的方向吗?

我不是在寻找解决方案,而是在寻找一个可以查找更多信息的位置,以便我可以设计自己的解决方案。

先感谢您。

python dataframe pandas google-cloud-storage parquet

4
推荐指数
1
解决办法
6592
查看次数

如何获得没有的数量.perl 6%HASH中的按键?

任何人都可以帮助知道如何计算不.在PERL 6中,哈希中的键是什么?寻找没有手动循环的东西.

提前致谢!

编辑:到目前为止尝试了以下但没有运气.

my %hash =  1 => "one", 2 => <21,22,23>, 3 => "three"  ;

my $count = %hash.keys [ makes it a flat list ]
my $count = %hash.count [no such method]
my $count = keys %hash [provides all the keys but not the count]
Run Code Online (Sandbox Code Playgroud)

hash count perl6

3
推荐指数
1
解决办法
376
查看次数

使用私有析构函数删除动态分配的对象

因此,我遇到了一个代码片段,该片段说明了如果我们要强制动态分配任何类对象,则应将其析构函数设为private

我试过了,是的,它不允许实例化堆栈上的对象。但是,当我实例化一个动态分配的实例并尝试删除该对象(否则会导致泄漏)时,我不断收到有关析构函数为私有的警告。

如何正确管理具有私有析构函数的动态分配对象的内存?

c++ destructor dynamic-memory-allocation

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

how to update/transform/replace spark df column values using a hashmap

I want to replace the values of a given df column, using a hashmap but I am struggling with the syntax. Can someone please point me in the right direction or to an existing example? I have searched but not able to find something which sheds light on the exact subject.

Edit:

Imagine a dataframe like shown below:

+-----------+--------+-----------+
|       Noun| Pronoun|  Adjective|
+-----------+--------+-----------+
|      Homer| Simpson|BeerDrinker|
|      Marge| Simpson|  Housewife|
|       Bart| Simpson|        Son|
|       Lisa| Simpson|   Daughter| …
Run Code Online (Sandbox Code Playgroud)

scala transform hashmap dataframe apache-spark

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