小编Nit*_*ndy的帖子

子线程没有看到主线程所做的更新

我正在通过扩展Sp​​arkListener类来实现SparkHealthListener.

@Component
class ClusterHealthListener extends SparkListener with Logging {
  val appRunning = new AtomicBoolean(false)
  val executorCount = new AtomicInteger(0)

  override def onApplicationStart(applicationStart: SparkListenerApplicationStart) = {
    logger.info("Application Start called .. ")
    this.appRunning.set(true)
    logger.info(s"[appRunning = ${appRunning.get}]")
  }

  override def onExecutorAdded(executorAdded: SparkListenerExecutorAdded) = {
    logger.info("Executor add called .. ")
    this.executorCount.incrementAndGet()
    logger.info(s"[executorCount = ${executorCount.get}]")
  }
}
Run Code Online (Sandbox Code Playgroud)

appRunningexecutorCount是在ClusterHealthListener类中声明的两个变量.ClusterHealthReporterThread只会读取值.

@Component
class ClusterHealthReporterThread @Autowired() (healthListener: ClusterHealthListener) extends Logging {
  new Thread {
    override def run(): Unit = {
      while (true) {
          Thread.sleep(10 * 1000) …
Run Code Online (Sandbox Code Playgroud)

multithreading scala thread-safety apache-spark

8
推荐指数
1
解决办法
194
查看次数

Redshift上个月的第一天和最后一天

我想找到Redshift上个月的第一天和最后一天.但是,大多数postgresql功能date_trunc似乎都不起作用.我怎样才能做到这一点?

amazon-redshift

7
推荐指数
2
解决办法
1万
查看次数

使用 PrivateMethodTester 测试采用泛型类型的私有方法

如何在 Scala 中使用 privateMethodTester 测试采用泛型类型的私有方法?

假设我有以下方法:

private def parseValueForJsonKeyWithReturnType[A: TypeTag](
   node: JsonNode, 
   key: String, 
   defaultValue: Option[A] = None): A = {

    val parsedValue = Option(node.get(key)).map(value => { 
      typeOf[A] match {
         case t if t =:= typeOf[String] =>
           value.textValue()
         case t if t =:= typeOf[Double] =>
           value.asDouble()
         case t if t =:= typeOf[Long] =>
           value.asLong()
         case _ => throw new RuntimeException(s"Doesn't support conversion to [type=${typeOf[A]}] for [key=${key}]")
       }
    })

    parsedValue.getOrElse(defaultValue.get).asInstanceOf[A]
  }
Run Code Online (Sandbox Code Playgroud)

我可以像这样调用方法

parseValueForJsonKeyWithReturnType[Boolean](jsonNode, key="hours")
parseValueForJsonKeyWithReturnType[String](jsonNode, key="hours")
parseValueForJsonKeyWithReturnType[Long](jsonNode, key="hours")
Run Code Online (Sandbox Code Playgroud)

在测试中,我正在尝试做

val parseValueForJsonKeyWithReturnTypeInt …
Run Code Online (Sandbox Code Playgroud)

scala private-methods scalatest

6
推荐指数
1
解决办法
399
查看次数

父子v / s多个索引-Elasticsearch 6.2+

当前,我们有一个使用父子映射的ES 5.3集群,因为我们的数据遵循此模型。父子映射是最好的选择,因为它支持集群侧连接,并通过存储在同一分片中提供性能优势。

从5.3到6.2的迁移涉及重大更改,因为ES v6.0及更高版本不再支持多种映射类型。

想知道是否值得在使用连接数据类型的新版Elasticsearch中坚持使用父子数据模型。

据我所知,有三种可能的选择

  1. 使用新的联接数据类型保留父子映射。

    优点

    • 集群侧联接
    • 性能优势
    • 仍然可以使用has_parent,has_child查询

    缺点

    • 平面映射架构(如果文档具有很多属性,将变得很难看)
    • 仅通过查看文档就难以识别类型
  2. 为每种映射类型创建单独的索引

    优点

    • 映射看起来更清晰
    • 只需查看即可轻松识别文档类型
    • 可以利用路由将父项的所有相关子文档放在同一分片中
    • 每个索引可以具有不同的分片配置(灵活性)

    缺点

    • 在两个索引中都需要一个公共字段来维护关系
    • 无法再使用has_parent,has_child查询
    • 需要应用程序侧连接
    • 子索引与父索引相比可以变得很大
    • 执行联接的多个查询会增加整体延迟
  3. 单个索引,但具有用于定义文档类型的自定义字段

    优点

    • 无需使用联接类型
    • 可以利用自定义路由将相关文档放在同一分片中

    缺点

    • 映射看起来很复杂
    • 索引会变得非常大,因为所有文档都将驻留在同一索引中

我更倾向于具有多个索引的第二种选择。我可以看到的主要缺点是应用程序侧连接可能很昂贵。同时,elasticsearch文档说has_parent,has_child查询也很昂贵。

通过使各个索引使用路由并因此在各个索引中实现数据局部性,可以在某种程度上实现将父子文档存储在同一分片中的另一个优点。

当前集群统计

270492501总文档

1596009父文档

268896492子文档

父级/子级文档计数比例最大为1:400

36个分片(12个主副本,24个副本)

92.33 GB数据

父级文档阅读量很大。子文档读写繁重。

想知道是否还有其他我需要考虑的性能/扩展方面。谢谢

elasticsearch

5
推荐指数
0
解决办法
1191
查看次数

使用 JAVA API 时的源过滤

我正在使用 Jest Client 和查询构建器。无法找到如何执行源过滤。

如何使用查询构建器将 _source 字段设置为 false?

elasticsearch

3
推荐指数
1
解决办法
2907
查看次数

如何加快 Elasticsearch 重新索引操作?

我们可以通过将副本设置为零并增加刷新间隔来加速 elasticsearch (v 5.3) 重新索引操作,还是已经在内部进行了处理?

elasticsearch

2
推荐指数
1
解决办法
5594
查看次数

在swift 2.0中将NSArray转换为NSMutable Array

当我尝试将nsarray对象插入到可变的swift数组时,我得到了这个控制台输出.代码工作正常,但最后,它抛出一个错误.请帮我解决这个错误.

Successfully retrieved 3 scores.
Optional("HmEbbowtxW")
<Events: 0x7b08bdf0, objectId: HmEbbowtxW, localId: (null)> {
    CreatedBy = "<PFUser: 0x7b02ed10, objectId: 04jp1ZeBn6>";
    EventDescription = test;
    EventName = test;
}
Optional("97BzKUxFdE")
<Events: 0x7b08cae0, objectId: 97BzKUxFdE, localId: (null)> {
    CreatedBy = "<PFUser: 0x7b02ed10, objectId: 04jp1ZeBn6>";
    EventDescription = fg;
    EventName = gfg;
}
Optional("QDHkg5tiUw")
<Events: 0x7b08cf80, objectId: QDHkg5tiUw, localId: (null)> {
    CreatedBy = "<PFUser: 0x7b02ed10, objectId: 04jp1ZeBn6>";
    EventDescription = asdasdasd;
    EventName = sdsd;
}
Could not cast value of type '__NSArrayI' (0x228e164) to 'NSMutableArray' (0x228e1c8).
Run Code Online (Sandbox Code Playgroud)

这是我的代码 …

nsmutablearray parse-platform swift

0
推荐指数
1
解决办法
863
查看次数

用于可选参数的 Mockito ArgumentCaptor

accountHandler 类中有一个具有以下签名的方法

public void processMessage(String accountId, 
Metrics metrics, 
Optional<ZonedDateTime> parsedDatetime) {

        // do something 
}
Run Code Online (Sandbox Code Playgroud)

在测试中,如果我想使用参数捕获器,我该如何定义它?

尝试了以下方法,但没有达到预期效果。

ArgumentCaptor<ZonedDateTime> timeCaptor = ArgumentCaptor.forClass(ZonedDateTime.class);
Run Code Online (Sandbox Code Playgroud)

使用 argcaptor 使其可选的语法是什么?

java mockito

0
推荐指数
1
解决办法
6541
查看次数