aboutsummaryrefslogtreecommitdiff
path: root/sql/core
diff options
context:
space:
mode:
authorShiti <ssaxena.ece@gmail.com>2015-05-07 01:00:29 -0700
committerReynold Xin <rxin@databricks.com>2015-05-07 01:00:29 -0700
commitfa8fddffd52f8146ccceb72c2990607aaf5b2131 (patch)
tree9e01edb034e363e24a49293cd7dff5f1cb59e834 /sql/core
parent01187f59b3d118495b6cfea965690829b99a36fa (diff)
downloadspark-fa8fddffd52f8146ccceb72c2990607aaf5b2131.tar.gz
spark-fa8fddffd52f8146ccceb72c2990607aaf5b2131.tar.bz2
spark-fa8fddffd52f8146ccceb72c2990607aaf5b2131.zip
[SPARK-7295][SQL] bitwise operations for DataFrame DSL
Author: Shiti <ssaxena.ece@gmail.com> Closes #5867 from Shiti/spark-7295 and squashes the following commits: 71a9913 [Shiti] implementation for bitwise and,or, not and xor on Column with tests and docs
Diffstat (limited to 'sql/core')
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/Column.scala31
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/functions.scala8
-rw-r--r--sql/core/src/test/scala/org/apache/spark/sql/ColumnExpressionSuite.scala33
-rw-r--r--sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala7
4 files changed, 77 insertions, 2 deletions
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/Column.scala b/sql/core/src/main/scala/org/apache/spark/sql/Column.scala
index 8eb632d3d6..8bbe11b412 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/Column.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/Column.scala
@@ -698,6 +698,37 @@ class Column(protected[sql] val expr: Expression) extends Logging {
println(expr.prettyString)
}
}
+
+ /**
+ * Compute bitwise OR of this expression with another expression.
+ * {{{
+ * df.select($"colA".bitwiseOR($"colB"))
+ * }}}
+ *
+ * @group expr_ops
+ */
+ def bitwiseOR(other: Any): Column = BitwiseOr(expr, lit(other).expr)
+
+ /**
+ * Compute bitwise AND of this expression with another expression.
+ * {{{
+ * df.select($"colA".bitwiseAND($"colB"))
+ * }}}
+ *
+ * @group expr_ops
+ */
+ def bitwiseAND(other: Any): Column = BitwiseAnd(expr, lit(other).expr)
+
+ /**
+ * Compute bitwise XOR of this expression with another expression.
+ * {{{
+ * df.select($"colA".bitwiseXOR($"colB"))
+ * }}}
+ *
+ * @group expr_ops
+ */
+ def bitwiseXOR(other: Any): Column = BitwiseXor(expr, lit(other).expr)
+
}
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/functions.scala b/sql/core/src/main/scala/org/apache/spark/sql/functions.scala
index 830b501771..1728b0b8c9 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/functions.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/functions.scala
@@ -438,6 +438,14 @@ object functions {
*/
def upper(e: Column): Column = Upper(e.expr)
+
+ /**
+ * Computes bitwise NOT.
+ *
+ * @group normal_funcs
+ */
+ def bitwiseNOT(e: Column): Column = BitwiseNot(e.expr)
+
//////////////////////////////////////////////////////////////////////////////////////////////
// Math Functions
//////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/ColumnExpressionSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/ColumnExpressionSuite.scala
index 3c1ad656fc..d96186c268 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/ColumnExpressionSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/ColumnExpressionSuite.scala
@@ -27,8 +27,6 @@ import org.apache.spark.sql.types._
class ColumnExpressionSuite extends QueryTest {
import org.apache.spark.sql.TestData._
- // TODO: Add test cases for bitwise operations.
-
test("collect on column produced by a binary operator") {
val df = Seq((1, 2, 3)).toDF("a", "b", "c")
checkAnswer(df.select(df("a") + df("b")), Seq(Row(3)))
@@ -385,4 +383,35 @@ class ColumnExpressionSuite extends QueryTest {
assert(row.getDouble(1) >= -4.0)
}
}
+
+ test("bitwiseAND") {
+ checkAnswer(
+ testData2.select($"a".bitwiseAND(75)),
+ testData2.collect().toSeq.map(r => Row(r.getInt(0) & 75)))
+
+ checkAnswer(
+ testData2.select($"a".bitwiseAND($"b").bitwiseAND(22)),
+ testData2.collect().toSeq.map(r => Row(r.getInt(0) & r.getInt(1) & 22)))
+ }
+
+ test("bitwiseOR") {
+ checkAnswer(
+ testData2.select($"a".bitwiseOR(170)),
+ testData2.collect().toSeq.map(r => Row(r.getInt(0) | 170)))
+
+ checkAnswer(
+ testData2.select($"a".bitwiseOR($"b").bitwiseOR(42)),
+ testData2.collect().toSeq.map(r => Row(r.getInt(0) | r.getInt(1) | 42)))
+ }
+
+ test("bitwiseXOR") {
+ checkAnswer(
+ testData2.select($"a".bitwiseXOR(112)),
+ testData2.collect().toSeq.map(r => Row(r.getInt(0) ^ 112)))
+
+ checkAnswer(
+ testData2.select($"a".bitwiseXOR($"b").bitwiseXOR(39)),
+ testData2.collect().toSeq.map(r => Row(r.getInt(0) ^ r.getInt(1) ^ 39)))
+ }
+
}
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala
index ca03713ef4..b1e0faa310 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala
@@ -17,6 +17,7 @@
package org.apache.spark.sql
+import org.apache.spark.sql.TestData._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.test.TestSQLContext.implicits._
import org.apache.spark.sql.types._
@@ -81,4 +82,10 @@ class DataFrameFunctionsSuite extends QueryTest {
struct(col("a") * 2)
}
}
+
+ test("bitwiseNOT") {
+ checkAnswer(
+ testData2.select(bitwiseNOT($"a")),
+ testData2.collect().toSeq.map(r => Row(~r.getInt(0))))
+ }
}