aboutsummaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorPedro Rodriguez <prodriguez@trulia.com>2015-08-04 22:32:21 -0700
committerDavies Liu <davies.liu@gmail.com>2015-08-04 22:34:02 -0700
commitd34548587ab55bc2136c8f823b9e6ae96e1355a4 (patch)
tree5a1158d13c761f945742d8c6736b6afdfe198ca9 /python
parenta02bcf20c4fc9e2e182630d197221729e996afc2 (diff)
downloadspark-d34548587ab55bc2136c8f823b9e6ae96e1355a4.tar.gz
spark-d34548587ab55bc2136c8f823b9e6ae96e1355a4.tar.bz2
spark-d34548587ab55bc2136c8f823b9e6ae96e1355a4.zip
[SPARK-8231] [SQL] Add array_contains
This PR is based on #7580 , thanks to EntilZha PR for work on https://issues.apache.org/jira/browse/SPARK-8231 Currently, I have an initial implementation for contains. Based on discussion on JIRA, it should behave same as Hive: https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFArrayContains.java#L102-L128 Main points are: 1. If the array is empty, null, or the value is null, return false 2. If there is a type mismatch, throw error 3. If comparison is not supported, throw error Closes #7580 Author: Pedro Rodriguez <prodriguez@trulia.com> Author: Pedro Rodriguez <ski.rodriguez@gmail.com> Author: Davies Liu <davies@databricks.com> Closes #7949 from davies/array_contains and squashes the following commits: d3c08bc [Davies Liu] use foreach() to avoid copy bc3d1fe [Davies Liu] fix array_contains 719e37d [Davies Liu] Merge branch 'master' of github.com:apache/spark into array_contains e352cf9 [Pedro Rodriguez] fixed diff from master 4d5b0ff [Pedro Rodriguez] added docs and another type check ffc0591 [Pedro Rodriguez] fixed unit test 7a22deb [Pedro Rodriguez] Changed test to use strings instead of long/ints which are different between python 2 an 3 b5ffae8 [Pedro Rodriguez] fixed pyspark test 4e7dce3 [Pedro Rodriguez] added more docs 3082399 [Pedro Rodriguez] fixed unit test 46f9789 [Pedro Rodriguez] reverted change d3ca013 [Pedro Rodriguez] Fixed type checking to match hive behavior, then added tests to insure this 8528027 [Pedro Rodriguez] added more tests 686e029 [Pedro Rodriguez] fix scala style d262e9d [Pedro Rodriguez] reworked type checking code and added more tests 2517a58 [Pedro Rodriguez] removed unused import 28b4f71 [Pedro Rodriguez] fixed bug with type conversions and re-added tests 12f8795 [Pedro Rodriguez] fix scala style checks e8a20a9 [Pedro Rodriguez] added python df (broken atm) 65b562c [Pedro Rodriguez] made array_contains nullable false 33b45aa [Pedro Rodriguez] reordered test 9623c64 [Pedro Rodriguez] fixed test 4b4425b [Pedro Rodriguez] changed Arrays in tests to Seqs 72cb4b1 [Pedro Rodriguez] added checkInputTypes and docs 69c46fb [Pedro Rodriguez] added tests and codegen 9e0bfc4 [Pedro Rodriguez] initial attempt at implementation
Diffstat (limited to 'python')
-rw-r--r--python/pyspark/sql/functions.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/python/pyspark/sql/functions.py b/python/pyspark/sql/functions.py
index e65b14dc0e..9f0d71d796 100644
--- a/python/pyspark/sql/functions.py
+++ b/python/pyspark/sql/functions.py
@@ -1311,6 +1311,23 @@ def array(*cols):
return Column(jc)
+@since(1.5)
+def array_contains(col, value):
+ """
+ Collection function: returns True if the array contains the given value. The collection
+ elements and value must be of the same type.
+
+ :param col: name of column containing array
+ :param value: value to check for in array
+
+ >>> df = sqlContext.createDataFrame([(["a", "b", "c"],), ([],)], ['data'])
+ >>> df.select(array_contains(df.data, "a")).collect()
+ [Row(array_contains(data,a)=True), Row(array_contains(data,a)=False)]
+ """
+ sc = SparkContext._active_spark_context
+ return Column(sc._jvm.functions.array_contains(_to_java_column(col), value))
+
+
@since(1.4)
def explode(col):
"""Returns a new row for each element in the given array or map.