-
Notifications
You must be signed in to change notification settings - Fork 28.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SPARK-7294][SQL] ADD BETWEEN #5839
Changes from 2 commits
d11d5b9
baf839b
7d62368
76f0c51
f080f8d
7b9b858
7e64d1e
c54d904
d2e7f72
f928816
b15360d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -426,6 +426,12 @@ def test_rand_functions(self): | |
for row in rndn: | ||
assert row[1] >= -4.0 and row[1] <= 4.0, "got: %s" % row[1] | ||
|
||
def test_between_function(self): | ||
df = self.sqlCtx.parallelize([Row(a=1, b=2, c=3), Row(a=2, b=1, c=3), Row(a=4, b=1, c=4)]).toDF() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i think this line would fail pep8 because it is over 100 chars |
||
self.assertEqual([False, True, True], | ||
df.select(df.a.between(df.b, df.c)).collect()) | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. remove one blank line. |
||
|
||
def test_save_and_load(self): | ||
df = self.df | ||
tmpPath = tempfile.mkdtemp() | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -295,6 +295,25 @@ class Column(protected[sql] val expr: Expression) extends Logging { | |
*/ | ||
def eqNullSafe(other: Any): Column = this <=> other | ||
|
||
/** | ||
* True if the current column is between the lower bound and upper bound, inclusive. | ||
* | ||
* @group java_expr_ops | ||
*/ | ||
def between(lowerBound: String, upperBound: String): Column = { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i think you can remove this function, and change the signature of the one below to take "Any". |
||
between(Column(lowerBound), Column(upperBound)) | ||
} | ||
|
||
/** | ||
* True if the current column is between the lower bound and upper bound, inclusive. | ||
* | ||
* @group java_expr_ops | ||
*/ | ||
def between(lowerBound: Column, upperBound: Column): Column = { | ||
And(GreaterThanOrEqual(this.expr, lowerBound.expr), | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. actually - how about we change the implementation here to use Column directly, i.e. (this >= lowerBound) && (this <= upperBound) and the Python one simply calls the JVM function? |
||
LessThanOrEqual(this.expr, upperBound.expr)) | ||
} | ||
|
||
/** | ||
* True if the current expression is null. | ||
* | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -208,6 +208,12 @@ class ColumnExpressionSuite extends QueryTest { | |
testData2.collect().toSeq.filter(r => r.getInt(0) <= r.getInt(1))) | ||
} | ||
|
||
test("between") { | ||
checkAnswer( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. it'd be easier to just inline the data here I think, you can do val testData = Seq((0, 1, 2), (1, 2, 3), ...).toDF("a", "b", "c") |
||
testData4.filter($"a".between($"b", $"c")), | ||
testData4.collect().toSeq.filter(r => r.getInt(0) >= r.getInt(1) && r.getInt(0) <= r.getInt(2))) | ||
} | ||
|
||
val booleanData = TestSQLContext.createDataFrame(TestSQLContext.sparkContext.parallelize( | ||
Row(false, false) :: | ||
Row(false, true) :: | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
actually I think you no longer need to wrap it in Column, since it is already a Python column.