如何禁用不发光的文字?

时间:2019-12-05 12:48:34

标签: scala apache-spark

在使用Spark(Scala)时,有时我偶然会忘记$。最小示例:

提供一些数据:

val foo = Seq((1, "Chicago"), (2, "Berlin")).toDF("b", "city")
val bar = Seq((1, "USA"), (2, "Germany")).toDF("a", "country")

我写以下内容:

foo.join(bar, $"a" === "b").show

其行为等同于:

foo.join(bar, $"a" === lit("b")).show

但是我真正想写的是:

foo.join(bar, $"a" === $"b").show

是否有一种方法可以防止语言/类型系统/ Spark Shell接受既不使用$也不使用lit的表达式?

1 个答案:

答案 0 :(得分:3)

问题是struct Boundary { std::array<int, 4> coordinates; int& top() { return coordinates[0]; } const int& top() const { return coordinates[0]; } // ... } Boundary sum{}; for (auto b : boundaries) { for (auto i = 0; i < 4; ++i) { sum.coordinates[i] += b.coordinates[i]; } } 上的===接受Column(源代码):

Any

所以她没有神奇的隐式转换...

您可以使用Pimp-My-Library模式,但是很遗憾,您无法覆盖现有的 def === (other: Any): Column = withExpr { val right = lit(other).expr if (this.expr == right) { logWarning( s"Constructing trivially true equals predicate, '${this.expr} = $right'. " + "Perhaps you need to use aliases.") } EqualTo(expr, right) } (AFAIK),但是可以实现===,该方法只能针对{{1 }}

====

然后,Columns将不会编译