cylab / php-spark
Apache Spark MapReduce 方法的数组包装器
0.0.3
2019-08-20 06:12 UTC
Requires (Dev)
- phpunit/phpunit: ^8.3
- squizlabs/php_codesniffer: ^3.4
This package is auto-updated.
Last update: 2024-09-20 22:17:58 UTC
README
php-spark 是一个数组包装器,它模拟了 Apache Spark 的 MapReduce API。
$data = new Dataset([1, 2, 3, 4]);
$result = $data
->map(function ($v) {
return 2 * $v;
})
->reduce(function ($v, $agg) {
return $agg + $v;
});
$result == 20;
php-spark 并不是 Apache Spark 的 PHP 驱动(我希望有这样一个存在)。
数据集
数据集是一个不可变的 数据数组。它相当于 Spark RDD(弹性分布式数据集)。
use Cylab\Spark\Dataset;
$d = new Dataset([1, 2, 3, 4]);
var_dump($d->collect());
转换
转换返回另一个数据集。
方法 | 描述 |
---|---|
map(func) | 返回一个新的分布式数据集,通过将源数据集中的每个元素传递给函数 func 来形成。 |
distinct() | 返回一个新的数据集,包含源数据集中的不同元素。 |
reduceByKey(func) | 当对一个 (K, V) 对的数据集进行调用时,返回一个 (K, V) 对的数据集,其中每个键的值都使用给定的 reduce 函数 func 聚合,该函数必须是类型 (V,V) => V。 |
groupByKey() | 当对一个 (K, V) 对的数据集进行调用时,返回一个 (K, V[]) 对的数据集。 |
动作
动作返回其他类型的输出。
方法 | 描述 |
---|---|
reduce(func) | 使用函数 func(该函数接受两个参数并返回一个)聚合数据集的元素。 |
collect() | 返回数据集中的所有元素作为数组。 |
count() | 返回数据集中的元素数量。 |
first() | 返回数据集中的第一个元素(类似于 take(1))。 |
take(n) | 返回一个包含数据集前 n 个元素的数组。 |
Map
Map 将提供的函数应用于数据集中的所有元素,并返回一个新的数据集,其中包含 map 操作的结果。
$d2 = $d->map(function ($v) { return 2 * $v; });
Reduce
提供的 reduce 函数必须接受两个参数:当前值和聚合值。
use Cylab\Spark\Dataset;
$d = new Dataset([1, 2, 3, 4]);
$result = $d->reduce(function ($v, $agg) {
return $agg + $v;
});
$result == 10;
元组
某些方法期望数据集包含一个 <key, value> 元组的列表。
use Cylab\Spark\Dataset;
use Cylab\Spark\Tuple;
$strings = ["foe", "bar", "foe"];
$d = new Dataset ($strings);
$d2 = $d->map(function($s) { return new Tuple($s, 1); });
ReduceByKey
为此方法工作,输入数据集必须是 <key, value> 元组的列表。然后对具有相同键的所有元素应用 reduce 函数。
$counts = $d2->reduceByKey(function ($count, $sum) {
return $sum + $count;
});
First
获取数据集的第一个元素。
// Tuple<"foe", 2>
var_dump($counts->first());
未来工作
- flatMap
- sample
- union
- intersection
- aggregateByKey
- sortByKey
- join
- cartesian
- takeSample
- takeOrdered
- countByKey
- saveAsObjectFile
- saveAsJsonFile