我正在尝试对一个后端服务器进行负载测试,并将一些配置解析到一个标签对象中。我正在尝试生成< code>Label对象的笛卡尔乘积,这将是一个< code>Metric对象。
Label {
String name;
String labe;
}
我有一个列表
[[name: "office_instance"value: "office_instance_0", name: "office_instance"value: "office_instance_1", name: "office_instance"value: "office_instance_2", name: "office_instance"value: "office_instance_3"], [name: "office_type"value: "office_type_0", name: "office_type"value: "office_type_1", name: "office_type"value: "office_type_2", name: "office_type"value: "office_type_3"], [name: "resource_type"value: "resource_type_0", name: "resource_type"value: "resource_type_1", name: "resource_type"value: "resource_type_2", name: "resource_type"value: "resource_type_3"], [name: "resource"value: "resource_0", name: "resource"value: "resource_1", name: "resource"value: "resource_2", name: "resource"value: "resource_3"], [name: "resource_group_name"value: "resource_group_name_0", name: "resource_group_name"value: "resource_group_name_1", name: "resource_group_name"value: "resource_group_name_2", name: "resource_group_name"value: "resource_group_name_3"], [name: "scope"value: "scope_0", name: "scope"value: "scope_1", name: "scope"value: "scope_2", name: "scope"value: "scope_3"]]
因为这是从配置生成的,所以生成时间序列的代码需要是动态的。在本例中,
labelList
的大小为5,每个单独的列表为4个标签。因此,度量对象的总数将为4*4*4*4*4。
度量对象的示例将是
[[ name: "office_instance"value: "office_instance_0", name: "office_type"value: "office_type_0", name: "resource_type"value: "resource_type_0", name: "resource"value: "resource_0", name: "resource_group_name"value: "resource_group_name_0", name: "scope"value: "scope_0"][name: "office_instance"value: "office_instance_0", name: "office_type"value: "office_type_0", name: "resource_type"value: "resource_type_0", name: "resource"value: "resource_0", name: "resource_group_name"value: "resource_group_name_0", name: "scope"value: "scope_1"]......]
生成指标有两种方法,一种是通过
addLabels
方法一次添加一个标签
Metric.newBuilder().addLabels(Label obj).build()
或者通过< code>addAllLabels
方法添加
Metric.newBuilder().addAllLabels(List<Label> obj).build()
我试图以迭代/递归的方式做到这一点,但它变得非常复杂和混乱。我检查了是否有java8替代方案。如果我能够获得列表
我在这里引用了Java 8中流的笛卡尔乘积作为流(仅使用流)。但还是想不通。任何帮助将不胜感激。
编辑:发现番石榴有
笛卡尔产品
API,这可能会有所帮助,不确定它是否是最优化的。
在我看来,你需要一个递归函数。这就是我想出的:
public class Cartesian {
public static void main(String[] args) {
List<List<Label>> labelList = Arrays.asList(//
Arrays.asList( //
new Label("office_instance", "office_instance_0"), //
new Label("office_instance", "office_instance_1") //
), //
Arrays.asList( //
new Label("office_type", "office_type_0"), //
new Label("office_type", "office_type_1") //
), //
Arrays.asList( //
new Label("resource_type", "resource_type_0"), //
new Label("resource_type", "resource_type_1") //
)//
);
List<List<Label>> result = generateCombinations(labelList);
System.out.println(result);
}
private static List<List<Label>> generateCombinations(List<List<Label>> labels) {
List<List<Label>> result = new ArrayList<>();
// for each label in first list
// generate combinations of labels from the rest of the list
for (Label label : labels.get(0)) {
if (labels.size() > 1) {
for (List<Label> entry : generateCombinations(labels.subList(1, labels.size()))) {
entry.add(label);
result.add(entry);
}
} else {
// base case
result.add(new ArrayList<>(Arrays.asList(label)));
}
}
return result;
}
private static class Label {
String name;
String label;
Label(String name, String label) {
this.name = name;
this.label = label;
}
@Override
public String toString() {
return "(name: " + name + ", label: " + label + ")";
}
}
}
为了简洁起见,我没有使用完整的列表。
输出(手动格式化):
[
[
(name: resource_type, label: resource_type_0),
(name: office_type, label: office_type_0),
(name: office_instance, label: office_instance_0)
],
[
(name: resource_type, label: resource_type_1),
(name: office_type, label: office_type_0),
(name: office_instance, label: office_instance_0)
],
[
(name: resource_type, label: resource_type_0),
(name: office_type, label: office_type_1),
(name: office_instance, label: office_instance_0)
],
[
(name: resource_type, label: resource_type_1),
(name: office_type, label: office_type_1),
(name: office_instance, label: office_instance_0)
],
[
(name: resource_type, label: resource_type_0),
(name: office_type, label: office_type_0),
(name: office_instance, label: office_instance_1)
],
[
(name: resource_type, label: resource_type_1),
(name: office_type, label: office_type_0),
(name: office_instance, label: office_instance_1)
],
[
(name: resource_type, label: resource_type_0),
(name: office_type, label: office_type_1),
(name: office_instance, label: office_instance_1)
],
[
(name: resource_type, label: resource_type_1),
(name: office_type, label: office_type_1),
(name: office_instance, label: office_instance_1)
]
]
现在有这几个数据 要转换成
本文向大家介绍map reduce实现笛卡尔乘积?相关面试题,主要包含被问及map reduce实现笛卡尔乘积?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 在Map阶段,将来自矩阵A的元素标识成l条<key,value>的形式,key=(i,k),k=1,2,…,l。value=(j,)。将来自矩阵B的元素标识成l条<key,value>的形式,key=(i,k),k=1,2,…,m。
的结果将是二维数组: 我试图做的是使用流在Java中编写这个笛卡尔乘积函数。 到目前为止,我有以下Java版本: 我对问题的猜测是: 我需要在某个地方使用收集器(可能在之后) 标识的数据类型错误
我有如下地图: 我想得到如下数据: 我尝试了如下: 但这不是我想要的代码,因为地图数据是动态的和不可预知的。 所以我应该像下面这样得到地图数据,但不能像我想要的那样:
问题内容: 我有两个pandas数据框: 获得其笛卡尔积的最佳实践是什么(当然不用像我这样明确地编写它)? 问题答案: 如果每行都有一个重复的键,则可以使用merge生成笛卡尔乘积(就像在SQL中一样)。 输出:
问题内容: 在Tensorflow中有什么简单的方法可以像itertools.product一样做笛卡尔积吗?我想获得两个张量(和)的元素组合,在Python中可以通过itertools作为。我正在Tensorflow中寻找替代方案。 问题答案: 我将在此假定和均为一维张量。 为了得到两者的笛卡尔积,我会用的组合和: 您使用LEN(一) LEN(B) 2张量,其中的元件的每个组合结束并且在最后一维