我得到了我正在运行的这段通用代码:
@Query(value="select m from Member m", countQuery="select count(m) from Member m")
Page<Organization> findMembers(Pageable pageable);
问题是df.rdd.foreachPartition( i => {
//some code
//writing to log
})
是在工作人员自己而不是在主人身上执行的 - 因此日志条目分散在某个地方,并且很难 - 有时甚至是不可能 - 来检索。有没有办法从工人或其他一些工作中写入主人的日志?
答案 0 :(得分:2)
没有立即写入主日志的方法 - 分布式处理意味着您的代码在各种计算机上运行,因此对计算机资源(例如文件系统)的任何访问都将进行也要分发。
有几种方法可以达到你想要的效果:
将日志视为数据:而不是使用mapPartitions
,您可以使用Iterator[String]
函数返回 val logLines = df.rdd.mapPartitions( i => {
//some code
val log: Iterator[String] = //construct log lines
log
}).collect()
logLines.foreach(logger.info)
并使用日志行想要写(或构建它们所需的数据)。假设日志行的总数不是很大,那么您可以将它们收集到驱动程序机器中并记录它们:
var products = db.Products.Where(pr => pr.Id == id)
.Take(1)
.ToList();
return View(products);
使用一些日志聚合框架:这些框架从多台计算机收集日志,并可将它们显示为单个日志条目流。这对于分布式计算非常有用,因为它使访问特定计算机的日志变得多余。