arrays - 在 PowerShell 中处理大型数组
问题描述
我很难理解在 PowerShell 中处理大型数据集/数组的最有效方法。我有包含数百万个需要处理和分组的项目的数组。这个列表的大小总是不同的,这意味着它可能是 350 万件或 1000 万件。
示例:他们按“4”分组的 350 万个项目,如下所示:
项目 0,1,2,3 组合在一起 4,5,6,7 组合在一起,依此类推。
我尝试通过循环遍历列表并分配给一个 pscustomobject 来使用单个线程处理数组,该对象只需 45-50 分钟即可完成。
我还尝试将数组分解为更小的数组,但这会导致进程运行时间更长。
$i=0
$d_array = @()
$item_array # Large dataset
While ($i -lt $item_array.length){
$o = "Test"
$oo = "Test"
$n = $item_array[$i];$i++
$id = $item_array[$i];$i++
$ir = $item_array[$i];$i++
$cs = $item_array[$i];$i++
$items = [PSCustomObject]@{
'field1' = $o
'field2' = $oo
'field3' = $n
'field4' = $id
'field5' = $ir
'field6'= $cs
}
$d_array += $items
}
我可以想象,如果我应用一个允许我运行多个作业的作业调度程序,会大大减少处理时间,但我想让其他人采取一种快速有效的方法来解决这个问题。
解决方案
虽然rokumaru的版本是无与伦比的,但在这里我尝试使用js2010的本地测量
同样$item_array = 1..100000
适用于所有版本
> .\SO_56406847.ps1
measuring...BDups
measuring...LotPings
measuring...Theo
measuring...js2010
measuring...rokumaru
BDups = 75,9949897 TotalSeconds
LotPings = 2,3663763 TotalSeconds
Theo = 2,4469917 TotalSeconds
js2010 = 2,9198114 TotalSeconds
rokumaru = 0,0109287 TotalSeconds
## Q:\Test\2019\06\01\SO_56406847.ps1
$i=0
$item_array = 1..100000 # Large dataset
'measuring...LotPings'
$LotPings = measure-command {
$d_array = for($i=0;$i -lt $item_array.length;$i+=4){
[PSCustomObject]@{
'field1' = "Test"
'field2' = "Test"
'field3' = $item_array[$i]
'field4' = $item_array[$i+1]
'field5' = $item_array[$i+2]
'field6' = $item_array[$i+3]
}
}
} # measure-command
推荐阅读
- python - python - 并行写入数据的单独线程使我的代码变慢 - 但为什么呢?
- python - 在 Aplhabets 上定义轮廓
- android - 将地图转换为对象
- python - 标签编码 n 维分类值
- groovy - 在 Groovy 中循环遍历没有迭代器的对象
- android - LifecycleObserver 使用使用较新 API 的方法产生异常
- java - com.rengwuxian.materialedittext.MaterialEditText 无法转换为 android.view.ViewGroup
- batch-file - 尝试在 Windows 10 中使用 gnu awk 来拆分大型序列文件
- javascript - 如何在我的应用程序架构中确保有效的依赖关系图
- python - 在一组文件中搜索 input_from_user 词