小编cla*_*lay的帖子

scala.util.Try:如何获得Throwable值?模式匹配?

以下REPL片段假定:

import scala.util.{Try, Success, Failure}
Run Code Online (Sandbox Code Playgroud)

为什么这两个语句没有通过编译?我得到"构造函数无法实例化为期望的类型":

Failure(new Exception("a")) match {
  case Success(i) => "a"; case Failure(e) => "b"; case _ => "c"; }

Success(123) match {
  case Success(i) => "a"; case Failure(e) => "b"; case _ => "c"; }
Run Code Online (Sandbox Code Playgroud)

我可以Try通过get或获得成功价值toOption.有没有相应的方法来获得失败的Throwable价值或Option[Throwable]

编辑:从失败/成功投射尝试工作

Failure(new Exception("a")).asInstanceOf[Try[Int]] match {
  case Success(i) => "a"; case Failure(e) => "b"; case _ => "c"; }

Success(123).asInstanceOf[Try[Int]] match {
  case Success(i) => "a"; case Failure(e) => "b"; case …
Run Code Online (Sandbox Code Playgroud)

scala try-catch

9
推荐指数
2
解决办法
9776
查看次数

java.time.ZonedDateTime.parse和iso8601?

为什么JDK8 DateTime库似乎无法解析有效的iso8601日期时间strings?它在时区偏移上窒息,表示为"+01"而不是"+01:00"

这有效:

java.time.ZonedDateTime.parse("2015-08-18T00:00+01:00")
Run Code Online (Sandbox Code Playgroud)

这会抛出一个解析异常:

java.time.ZonedDateTime.parse("2015-08-18T00:00+01")
Run Code Online (Sandbox Code Playgroud)

来自iso8601维基百科页面:

与UTC的偏移量以与"Z"相同的方式附加到时间,格式为±[hh]:[mm],±[hh] [mm]或±[hh].因此,如果描述的时间比UTC早一个小时(例如冬季柏林的时间),则区域指示符将为"+01:00","+ 0100"或简称为"+01".

编辑:这看起来像JDK中的实际合法错误.

https://bugs.openjdk.java.net/browse/JDK-8032051

哇,经过多年测试新的日期时间后,我认为他们会发现一些如此明显的东西.我还认为JDK作者类型非常严格,可以使用更好的自动化测试套件.

更新:这在当前的jdk-9版本中完全修复.我刚刚确认了.上面显示的完全相同的解析命令在当前的jdk-8构建中失败,并且在jdk-9中完美地工作.

附录:FWIW,基于ISO-8601的RFC 3339,不允许这个简写.您必须在时区偏移中指定分钟.

java iso8601 java-8

9
推荐指数
2
解决办法
8989
查看次数

Spark在groupBy/aggregate中合并/组合数组

以下Spark代码正确演示了我想要做的事情,并使用一个小的演示数据集生成正确的输出.

当我在大量生产数据上运行相同的一般类型的代码时,我遇到了运行时问题.Spark作业在我的集群上运行约12个小时并失败.

只是看一下下面的代码,爆炸每一行似乎都是低效的,只是将它合并回来.在给定的测试数据集中,第四行包含array_value_1中的三个值和array_value_2中的三个值,它们将爆炸为3*3或9个爆炸行.

那么,在一个更大的数据集中,一行有五个这样的数组列,每列有十个值,会爆炸成10 ^ 5个爆炸行?

查看提供的Spark函数,没有开箱即用的功能可以实现我想要的功能.我可以提供用户定义的功能.这有什么速度缺点吗?

val sparkSession = SparkSession.builder.
  master("local")
  .appName("merge list test")
  .getOrCreate()

val schema = StructType(
  StructField("category", IntegerType) ::
    StructField("array_value_1", ArrayType(StringType)) ::
    StructField("array_value_2", ArrayType(StringType)) ::
    Nil)

val rows = List(
  Row(1, List("a", "b"), List("u", "v")),
  Row(1, List("b", "c"), List("v", "w")),
  Row(2, List("c", "d"), List("w")),
  Row(2, List("c", "d", "e"), List("x", "y", "z"))
)

val df = sparkSession.createDataFrame(rows.asJava, schema)

val dfExploded = df.
  withColumn("scalar_1", explode(col("array_value_1"))).
  withColumn("scalar_2", explode(col("array_value_2")))

// This will output 19. 2*2 + 2*2 + 2*1 + …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql

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

Avro Java API时间戳逻辑类型?

使用Avro Java API,我可以创建一个简单的记录模式,如:

    Schema schemaWithTimestamp = SchemaBuilder
            .record("MyRecord").namespace("org.demo")
            .fields()
            .name("timestamp").type().longType().noDefault()
            .endRecord();
Run Code Online (Sandbox Code Playgroud)

如何使用逻辑类型标记架构字段,具体如下:https: //avro.apache.org/docs/1.8.1/api/java/org/apache/avro/LogicalTypes.TimestampMillis.html

java time avro

9
推荐指数
2
解决办法
8880
查看次数

Flink 1.13.2:NoResourceAvailableException

这是在 Amazon Kinesis Data Analytics Flink 环境中运行的 Flink 1.13.2。

该应用程序在 Kafka 主题上运行。当主题的流量较小时,该应用程序运行良好,当流量较大时,我收到此错误。如何排除故障、调整和修复?

我看到类似的问题,但这在旧版本的 Flink 中显然是一个单独的问题: Apache Flink - WordCount - NoResourceAvailableException

异常跟踪是:

2021-12-30 18:16:45
java.util.concurrent.CompletionException: org.apache.flink.runtime.jobmanager.scheduler.NoResourceAvailableException: Could not acquire the minimum required resources.
    at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:331)
    at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:346)
    at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:632)
    at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
    at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
    at org.apache.flink.runtime.jobmaster.slotpool.DeclarativeSlotPoolBridge$PendingRequest.failRequest(DeclarativeSlotPoolBridge.java:535)
    at org.apache.flink.runtime.jobmaster.slotpool.DeclarativeSlotPoolBridge.cancelPendingRequests(DeclarativeSlotPoolBridge.java:128)
    at org.apache.flink.runtime.jobmaster.slotpool.DeclarativeSlotPoolBridge.failPendingRequests(DeclarativeSlotPoolBridge.java:362)
    at org.apache.flink.runtime.jobmaster.slotpool.DeclarativeSlotPoolBridge.notifyNotEnoughResourcesAvailable(DeclarativeSlotPoolBridge.java:351)
    at org.apache.flink.runtime.jobmaster.JobMaster.notifyNotEnoughResourcesAvailable(JobMaster.java:824)
    at jdk.internal.reflect.GeneratedMethodAccessor133.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcInvocation(AkkaRpcActor.java:301)
    at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:212)
    at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.handleRpcMessage(FencedAkkaRpcActor.java:77)
    at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleMessage(AkkaRpcActor.java:158)
    at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:26)
    at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:21)
    at scala.PartialFunction.applyOrElse(PartialFunction.scala:123)
    at scala.PartialFunction.applyOrElse$(PartialFunction.scala:122)
    at akka.japi.pf.UnitCaseStatement.applyOrElse(CaseStatements.scala:21)
    at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:171) …
Run Code Online (Sandbox Code Playgroud)

apache-flink flink-streaming

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

brew install veclibfort:gfortran:没有这样的文件或目录

作为八度音阶的先决条件,我需要安装veclibfort:

brew install veclibfort
Run Code Online (Sandbox Code Playgroud)

我收到了错误

==> make check
gfortran -o tester -O tester.f90 vecLibFort.o -framework vecLib
make: gfortran: No such file or directory
make: *** [check] Error 1
Run Code Online (Sandbox Code Playgroud)

这个错误听起来像我没有安装gfortran,但我确实如此.如果我跑gfortran -v:

Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/4.8.3/libexec/gcc/x86_64-apple-darwin13.2.0/4.8.3/lto-wrapper
Target: x86_64-apple-darwin13.2.0
Configured with: ../configure --build=x86_64-apple-darwin13.2.0 --(snip)
Thread model: posix
gcc version 4.8.3 (GCC) 
Run Code Online (Sandbox Code Playgroud)

这个问题似乎在这里得到解决:

https://github.com/Homebrew/homebrew-science/issues/992

但似乎没有相关的解决方案.

homebrew gfortran

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

Fold,Reduce,Aggregate的Spark Async接口?

在官方的Spark RDD API中:

https://spark.apache.org/docs/2.1.0/api/java/org/apache/spark/rdd/AsyncRDDActions.html

count,collect,foreach和take all都有异步变体返回Future.

为什么折叠,缩小和聚合没有这个异步/未来接口?这看起来非常重要.

asynchronous future apache-spark

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

JDK 9 + Mac OS + jlink?

我在Mac OS上安装了JDK 9的发行版.

jshell工作得很好,Jigsaw模块支持工作,但没有jlink:

?  java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
Run Code Online (Sandbox Code Playgroud)

这是空的:

find /System/Library/Frameworks/JavaVM.framework/Versions/Current/ -iname jlink\*
Run Code Online (Sandbox Code Playgroud)

供参考:

?  ls -l $(which java)
lrwxr-xr-x  1 root  wheel  74 Nov  7  2016 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
Run Code Online (Sandbox Code Playgroud)

java macos jlink java-platform-module-system java-9

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

Terraform 升级提供程序

在现有的 Terraform 目录中:

~ terraform version  
Terraform v0.11.11
+ provider.aws v1.51.0
Run Code Online (Sandbox Code Playgroud)

如果我设置了一个新的 Terraform 目录:

~ terraform version
Terraform v0.11.11
+ provider.aws v1.55.0
Run Code Online (Sandbox Code Playgroud)

如何升级我的provider.aws?如果我设置version = "~> 1.55.0"provider "aws"我的.tf文件,我得到一个错误:

* provider.aws: no suitable version installed
  version requirements: "~> 1.55.0"
  versions installed: "1.51.0"
Run Code Online (Sandbox Code Playgroud)

我希望找到一个terraform update命令或类似的东西。但我找不到那个。

我不应该升级提供程序吗?我需要删除状态,重新运行init然后refresh吗?或者,还有更好的方法?

terraform terraform-provider-aws

8
推荐指数
3
解决办法
5338
查看次数

jq JSON 处理缺失字段

通常,我想做这样的事情,它有效:

echo '{"a": 123, "b": "{\"embedded\": 456}", "c": 789}' | jq '{a, "b2": .b | fromjson, c}' 
Run Code Online (Sandbox Code Playgroud)

有效并产生:

{
  "a": 123,
  "b2": {
    "embedded": 456
  },
  "c": 789
}
Run Code Online (Sandbox Code Playgroud)

有时,字段“b”丢失,在这种情况下,上面的 jq 将出错:

echo '{"a": 123, "c": 789}' | jq '{a, "b2": .b | fromjson, c}'
Run Code Online (Sandbox Code Playgroud)

这给出了一个 null 错误,这是有道理的,因为 b 缺失,所以.bnull 和fromjsonnull 上的错误。我想编写我的jq命令,以便如果b缺少记录,则不会输出它。我想简单地得到这个:

{
  "a": 123,
  "c": 789
}
Run Code Online (Sandbox Code Playgroud)

我浏览了jq参考手册。我无法使用 if/else/end 结构来解决这个问题。我没有看到任何其他可用的空处理函数或语言结构。

json jq

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