小编Bos*_*ian的帖子

让Spark SQL知道Primary,Foreign,Not NULL约束的方法

我来自关系数据库世界,所以我有点困惑,Spark SQL 似乎没有利用任何模式约束,如主键、外键和非空约束。

我相信这就是为什么我总是观察到notnull查询计划中存在一些冗余检查。

所以我的问题是,如果数据源定义了这些约束,是否有任何可能的方法让 Spark SQL 利用这些约束?

谢谢。

apache-spark apache-spark-sql

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

模板类型的值,如std :: false_type

如果std::false_type是类型,此类型的有效值是多少?如果我只想实现类似下面的返回类型的函数std::false_type,我怎么能实现这个呢?

typename std::false_type operator()(){
   return declval<std::false_type>();
}
Run Code Online (Sandbox Code Playgroud)

c++ templates

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

不在Presto vs Spark SQL的实现中

我得到了一个非常简单的查询,当在同一硬件上运行Spark SQL和Presto时(3小时vs 3分钟),显示出显着的性能差异。

SELECT field 
FROM test1 
WHERE field NOT IN (SELECT field FROM test2)
Run Code Online (Sandbox Code Playgroud)

经过对查询计划的研究,我发现原因是Spark SQL如何处理NOT IN谓词子查询。为了正确处理NOT IN的NULL,Spark SQL将NOT IN谓词转换为Left AntiJoin( (test1=test2) OR isNULL(test1=test2))

Spark SQL引入OR isNULL(test1=test2)了确保的正确语义NOT IN

但是,ORLeft AntiJoin连接谓词的唯一可行的物理连接策略Left AntiJoinBroadcastNestedLoopJoin。在当前阶段,我可以将NOT IN改写为NOT EXISTS来解决此问题。在NOT EXISTS的查询计划中,我可以看到join谓词是Left AntiJoin(test1=test2)为NOT EXISTS(5分钟完成)导致更好的物理联接运算符的原因。

到目前为止,我很幸运,因为我的数据集当前没有任何NULL属性,但是将来可能会具有,而NOT IN的语义正是我真正想要的。

所以我检查了Presto的查询计划,它没有真正提供,Left AntiJoinSemiJoin与一起使用FilterPredicate = not (expr)。Presto的查询计划没有提供太多信息,例如Spark。

所以我的问题更像是:

我可以假设Presto有更好的物理联接运算符来处理NOT IN操作吗?与Spark SQL不同,它不依赖于连接谓词的重写isnull(op1 = op2)来确保逻辑计划级别中NOT …

null isnull presto apache-spark-sql

5
推荐指数
1
解决办法
119
查看次数

如何避免 AWS S3 限制问题?

我访问 AWS S3 的所有工作都在该区域:us-east2AZ 是us-east-2a

但我看到了一些来自 S3 的限制投诉,所以我想知道如果我将一些工作转移到另一个可用区,例如us-east-2b,它可以缓解问题吗?(或者它不会有帮助,因为us-east-2aus-east-2b实际上指向相同的端点?)

谢谢。

amazon-s3 amazon-web-services

4
推荐指数
1
解决办法
9931
查看次数

Scala语法,例如private [this]

我是scala的新手,谁能为下面的方括号[this]指出什么样的术语?

private[this] lazy val outputAttributes = AttributeSeq(output)

谢谢。

scala terminology

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

Scala 类型橡皮擦

case class Thing[T](value: T)
def processThing(thing: Thing[_]) = {
  thing match {
    case Thing(value: Int) => "Thing of int"
    case Thing(value: String) => "Thing of string"
    case _ => "Thing of something else"
  }
}

println(processThing(Thing(1)))
println(processThing(Thing("hello")))
Run Code Online (Sandbox Code Playgroud)

以上输出Thing of intThing of string. 我的问题是,如果类型橡皮擦启动,为什么类型信息在运行时仍然可用?

generics scala type-erasure erasure

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