GitHub user HyukjinKwon reopened a pull request:

    https://github.com/apache/spark/pull/15432

    [SPARK-17854][SQL] rand/randn allows null/long as input seed

    ## What changes were proposed in this pull request?
    
    This PR proposes `rand`/`randn` accept `null` as input in Scala/SQL and 
`LongType` as input in SQL. In this case, it treats the values as `0`.
    
    So, this PR includes both changes below:
    
    - `null` support
    
      It seems MySQL also accepts this.
    
    
      ```sql
    mysql> select rand(0);
    +---------------------+
    | rand(0)             |
    +---------------------+
    | 0.15522042769493574 |
    +---------------------+
    1 row in set (0.00 sec)
    
    mysql> select rand(NULL);
    +---------------------+
    | rand(NULL)          |
    +---------------------+
    | 0.15522042769493574 |
    +---------------------+
    1 row in set (0.00 sec)
    ```
    
      and also Hive does according to 
[HIVE-14694](https://issues.apache.org/jira/browse/HIVE-14694)
    
      So the codes below:
    
      ```scala
      spark.range(1).selectExpr("rand(null)").show()
      ```
    
      prints..
    
      **Before**
    
        ```
        Input argument to rand must be an integer literal.;; line 1 pos 0
    org.apache.spark.sql.AnalysisException: Input argument to rand must be an 
integer literal.;; line 1 pos 0
        at 
org.apache.spark.sql.catalyst.analysis.FunctionRegistry$$anonfun$5.apply(FunctionRegistry.scala:465)
        at 
org.apache.spark.sql.catalyst.analysis.FunctionRegistry$$anonfun$5.apply(FunctionRegistry.scala:444)
    ```
    
      **After**
    
        ```
        +-----------------------+
        |rand(CAST(NULL AS INT))|
        +-----------------------+
        |    0.13385709732307427|
        +-----------------------+
        ```
    
    - `LongType` support in SQL.
    
      In addition, it make the function allows to take `LongType` consistently 
within Scala/SQL.
    
      In more details, the codes below:
    
      ```scala
    spark.range(1).select(rand(1), rand(1L)).show()
    spark.range(1).selectExpr("rand(1)", "rand(1L)").show()
    ```
    
      prints..
    
      **Before**
    
        ```
    +------------------+------------------+
    |           rand(1)|           rand(1)|
    +------------------+------------------+
    |0.2630967864682161|0.2630967864682161|
    +------------------+------------------+
    
    
    Input argument to rand must be an integer literal.;; line 1 pos 0
    org.apache.spark.sql.AnalysisException: Input argument to rand must be an 
integer literal.;; line 1 pos 0
        at 
org.apache.spark.sql.catalyst.analysis.FunctionRegistry$$anonfun$5.apply(FunctionRegistry.scala:465)
        at
    ```
    
      **After**
    
        ```
    +------------------+------------------+
    |           rand(1)|           rand(1)|
    +------------------+------------------+
    |0.2630967864682161|0.2630967864682161|
    +------------------+------------------+
    
    +------------------+------------------+
    |           rand(1)|           rand(1)|
    +------------------+------------------+
    |0.2630967864682161|0.2630967864682161|
    +------------------+------------------+
    ```
    
    
    ## How was this patch tested?
    
    Unit tests in `DataFrameSuite.scala` and `RandomSuite.scala`.


You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/HyukjinKwon/spark SPARK-17854

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/spark/pull/15432.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #15432
    
----
commit 7fa7db22dd4f2ba88ab1f09e4b776003b3f62fdb
Author: hyukjinkwon <gurwls...@gmail.com>
Date:   2016-10-11T09:21:18Z

    rand/randn allows null as input seed

commit 6f8f3f33f9b67d77285048bfd7d794990e072b8a
Author: hyukjinkwon <gurwls...@gmail.com>
Date:   2016-10-12T12:23:56Z

    Use ExpectsInputTypes and allow LongType and IntegerType

commit a99f674ff9b9cebb730a1e290c0fa05af8627f1d
Author: hyukjinkwon <gurwls...@gmail.com>
Date:   2016-10-12T14:31:11Z

    Override constructor

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to