我必须对大约200万行数据进行数据分析,每行大约250字节.总共大约500兆字节的数据.我在带有4G内存的Virtualbox Linux上运行最新的Rakudo.
大约8个小时后,由于内存不足,我得到了MoarVM的恐慌.如何为MoarVM提供更多内存?不幸的是,由于部分数据分析需要整个2米的行,所以我不能将2百万分成块并写入文件.
非常感谢你 !!!
lisprog
我从 /path/to/data 运行 /home/foo/bar.p6 并显示“分段错误(核心转储)”
我在 /var/crash 或我的主目录或当前工作目录中找不到核心转储文件。
我认为是 Raku 本身进行了核心倾销。
如果我的程序导致转储,raku 会将核心转储文件放在哪里,如果 Raku 本身进行了核心转储,我会在哪里找到转储文件?
谢谢。
我有相同的数据集并且运行相同的代码,但有时我在小数点后 19 位及以后得到不同的结果。虽然对于小于 0.0001 的数字这不是我很关心的问题,但它让我想知道小数点后 19 位是否是 Raku 的精度限制?
Word 104 differ:
0.04948872986571077 19 chars
0.04948872986571079 19 chars
Word 105 differ:
0.004052062278212545 20 chars
0.0040520622782125445 21 chars
Run Code Online (Sandbox Code Playgroud) 在添加更多数据之前,我一直在处理大量数据。结果以字符串的形式写入文件,但是我收到了这个错误信息,在我的代码梳理了2天后,我无法找到编程错误;在添加新数据之前,我的代码一直运行良好。
Died with the exception:
Attempt to divide by zero when coercing Rational to Str
in sub analyzeData at /home/xyz/numberCrunch.p6 line 2720
in block at /home/xyz/numberCrunch.p6 line 3363
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
第 2720 行是输出到文件的行: $fh.say("$result");
所以,Rational 似乎是一个延迟评估。有没有办法强制将 Rational 立即转换为小数?或者通过让 Rational 尽早检测到 0 分母使 Rational 变得更聪明?
我真的很喜欢perl6和计划.我想知道perl6中的函数是否与方案中的"cons,car,cdr"函数类似?我一直在做的事情很麻烦:
sub cons($a, $aList) { return flat($a, $aList); } # sometimes flat is undesired;
sub car($aList) { return first($aList); }
sub cdr($aList) { return tail($aList.elems - 1); }
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在尝试解析 csv 文件,并且正在尝试访问 Perl6 中的原始正则表达式中的名称正则表达式。事实证明是零。正确的做法是什么?
grammar rsCSV {
regex TOP { ( \s* <oneCSV> \s* \, \s* )* }
proto regex oneCSV {*}
regex oneCSV:sym<noQuote> { <-[\"]>*? }
regex oneCSV:sym<quoted> { \" .*? \" } # use non-greedy match
}
my $input = prompt("Enter csv line: ");
my $m1 = rsCSV.parse($input);
say "===========================";
say $m1;
say "===========================";
say "1 " ~ $m1<oneCSV><quoted>; # this fails; it is "Nil"
say "2 " ~ $m1[0];
say "3 " ~ $m1[0][2];
Run Code Online (Sandbox Code Playgroud) 我试图找到一种简单的方法来匹配任何一组单词.我一直在使用for循环,但有更简单的方法吗?
my @a=<a b c d e f>;
my $x="a1234567";
say $x ~~ m/ @a.any /;
Run Code Online (Sandbox Code Playgroud)
它返回False.有没有办法让它发挥作用?谢谢.
我正在尝试下载网页; 然后用正则表达式进行分析; 然后获取正则表达式发现的文件.我有两个问题:
(1)我使用wget这一行下载网页和文件
my $webPage = "onePage";
my $result = run <<wget -O $webPage $aSite>>, :out, :err;
Run Code Online (Sandbox Code Playgroud)
来自哪里$webPage的输出文件wget.问题:任何perl6相当于wget?我URI::FetchFile在perl6网站上使用过模块; 它获取了一些文件,但它无法获取网页.
(2)wget下载的$ webPage有时会出现格式错误的UTF-8字符,导致程序崩溃.当我做
cat onePage
Run Code Online (Sandbox Code Playgroud)
从shell中,那些格式错误的UTF-8字符显示为blob,并且此命令导致与我的程序相同的错误:
cat onePage | perl6 -ne '.say;'
Run Code Online (Sandbox Code Playgroud)
并且perl6的错误输出是
Malformed UTF-8
in block <unit> at -e line 1
Run Code Online (Sandbox Code Playgroud)
在终端或shell上,一个格式错误的UTF-8字符显示为这样的blob:
h?lt
Run Code Online (Sandbox Code Playgroud)
如果我尝试删除非打印字符,那么结果是我错过了大量文件链接:
$tmpLine ~~ s/<-[print]>//; # this causes my program to miss many files
Run Code Online (Sandbox Code Playgroud)
如何最好地处理这些格式错误的UTF-8字符或任何格式错误的unicodes甚至格式错误的控制字符?
raku 网页表示,应在归约运算符中为用户定义的函数使用额外的括号:https : //docs.raku.org/language/operators#Reduction_metaoperators
但是,当我将函数作为变量传递时出现错误(我使用的是 Rakudo Star 2010.10):
> sub lessThan ($a, $b) { $a < $b }
&lessThan
> my @a = ((1,2,3), (6,5,4))
[(1 2 3) (6 5 4)]
> sub x (@arrOfArr, &func) { say @arrOfArr.grep( { [[&func]] ($_[0], $_[1], $_[2]) } ); }
&x
> x(@a, &lessThan)
((1 2 3) (6 5 4)) # <----------------------------------- this is not what I expected
> say @a.grep( { [<] ($_[0], $_[1], $_[2]) } );
((1 2 3)) # …Run Code Online (Sandbox Code Playgroud) 我有一个来自 Wild Wild Web 的文件,它包含格式错误的 UTF8。我在早期版本的 Raku 中处理了其他代码中格式错误的 UTF8。在 2020.10 版本中,我在下面遇到了这个问题。对 utf8-c8 的支持是否已更改(此页面说它应该可以工作,但似乎没有):
https://docs.raku.org/language/unicode#index-entry-UTF-8_Clean-8
这个页面有这个例子:
say slurp($test-file, enc => 'utf8-c8');
Run Code Online (Sandbox Code Playgroud)
现在我在命令行上的代码:
raku -e 'my $a = slurp("zlist"); for $a.lines { .say }'
Malformed UTF-8 near bytes 73 e2 5f at line 55 col 14
in block <unit> at -e line 1
Run Code Online (Sandbox Code Playgroud)
然后使用这个:
raku -e 'my $a = slurp("zlist", enc => 'utf8-c8'); for $a.lines { .say }'
===SORRY!=== Error while compiling -e
Undeclared routine:
utf8-c8 used at line 1
Run Code Online (Sandbox Code Playgroud)
我的代码很简单,基本上是从示例中复制的。我究竟做错了什么?