我有一个用例,我在hive表中创建rdd。我编写了一个业务逻辑,可以在hive表的每一行上运行。我的假设是,当我创建rdd并跨越它的地图进程时,它会利用我所有的火花执行器。但是,我在日志中看到的只有一个节点处理rdd,而我的5个节点的其余部分处于空闲状态。这是我的代码
$(document).ready(function () {
bindGrid('','');
$("#btnID").click(function () {
try {
var parameter1 = $('#txtFromDate').val();
var parameter2 = $('#txtToDate').val();
bindGrid(parameter1,parameter2);
} catch (e) {
}
});
});
function bindGrid(parameter1,parameter2) {
$('#formdata4').dataTable({
...
"sAjaxSource": "dataTable.php",
"fnServerParams": function (aoData) {
aoData.push({ "name": "FromDate", "value": parameter1 },{"name":"ToDate","value":parameter2});
perm = aoData;
},
...
});
}
我出错的任何线索?
答案 0 :(得分:1)
您的数据可能会出现偏差吗?
要排除这种可能性,请执行以下操作并重新运行代码。
val flow = hiveContext.sql("select * from humsdb.t_flow").repartition(200)
var x = flow.rdd.map { row =>
< do some computation on each row>
}
此外,如果您的地图逻辑中依赖于特定列,则可以在下面执行
val flow = hiveContext.sql("select * from humsdb.t_flow").repartition(col("yourColumnName"))
var x = flow.rdd.map { row =>
< do some computation on each row>
}
好的分区列可以是日期列
答案 1 :(得分:1)