cylab/php-spark

Apache Spark MapReduce 方法的数组包装器

维护者

详细信息

gitlab.cylab.be/tibo/php-spark.git

0.0.3 2019-08-20 06:12 UTC

This package is auto-updated.

Last update: 2024-09-20 22:17:58 UTC


README

pipeline status coverage report

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