You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mi...@apache.org on 2017/02/02 06:48:59 UTC

zeppelin git commit: [ZEPPELIN-2030] Select statement doesn't work in LivySparkSQLInterpreter

Repository: zeppelin
Updated Branches:
  refs/heads/master fe11b32e8 -> 8774f8073


[ZEPPELIN-2030] Select statement doesn't work in LivySparkSQLInterpreter

### What is this PR for?
I try to execute sql query by ``%livy.sql``, I got a error as below
```
ERROR [2017-01-30 11:15:57,060] ({pool-2-thread-6} LivySparkSQLInterpreter.java[interpret]:143) - Exception in LivySparkSQLInterpreter while interpret
java.lang.StringIndexOutOfBoundsException: String index out of range: 28
        at java.lang.String.substring(String.java:1963)
        at org.apache.zeppelin.livy.LivySparkSQLInterpreter.parseSQLOutput(LivySparkSQLInterpreter.java:177)
        at org.apache.zeppelin.livy.LivySparkSQLInterpreter.interpret(LivySparkSQLInterpreter.java:128)
        at org.apache.zeppelin.interpreter.LazyOpenInterpreter.interpret(LazyOpenInterpreter.java:94)
        at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:489)
        at org.apache.zeppelin.scheduler.Job.run(Job.java:175)
        at org.apache.zeppelin.scheduler.FIFOScheduler$1.run(FIFOScheduler.java:139)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
```
I seem ``parseSQLOutput`` method try to filter out ``only showing top 1 row`` but it doesn't.
Therefore, I fix this issue by modifying condition

### What type of PR is it?
Bug Fix

### Todos
* [x] - none

### What is the Jira issue?
[ZEPPELIN-2030](https://issues.apache.org/jira/browse/ZEPPELIN-2030)

### How should this be tested?
try  to execute ``%livy.sql  SELECT * FROM bank`` on  tutorial

### Screenshots (if appropriate)
Before
![2017-01-30 11 42 15](https://cloud.githubusercontent.com/assets/3747345/22412521/73c09e70-e6f2-11e6-9db4-d948201b7e9e.png)

After
![2017-01-30 12 08 13](https://cloud.githubusercontent.com/assets/3747345/22412525/806e3696-e6f2-11e6-909e-6c4ffade4356.png)

### Questions:
* Does the licenses files need update?
* Is there breaking changes for older versions?
* Does this needs documentation?

Author: Chin Tzulin <jp...@w022341412910m.local>

Closes #1960 from del680202/bug-2030 and squashes the following commits:

86ebc82 [Chin Tzulin] Fix test problem
d681100 [Chin Tzulin] Add test case into LivySQLInterpreterTest.java
8f499c4 [Chin Tzulin] [ZEPPELIN-2030] Select statement doesn't work in LivySparkSQLInterpreter


Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/8774f807
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/8774f807
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/8774f807

Branch: refs/heads/master
Commit: 8774f80732927eaa62709ea0f790fb165847a389
Parents: fe11b32
Author: Chin Tzulin <jp...@w022341412910m.local>
Authored: Tue Jan 31 17:34:38 2017 +0900
Committer: Mina Lee <mi...@apache.org>
Committed: Thu Feb 2 15:48:38 2017 +0900

----------------------------------------------------------------------
 .../zeppelin/livy/LivySparkSQLInterpreter.java  |  3 ++-
 .../zeppelin/livy/LivySQLInterpreterTest.java   | 22 +++++++++++++++++++-
 2 files changed, 23 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8774f807/livy/src/main/java/org/apache/zeppelin/livy/LivySparkSQLInterpreter.java
----------------------------------------------------------------------
diff --git a/livy/src/main/java/org/apache/zeppelin/livy/LivySparkSQLInterpreter.java b/livy/src/main/java/org/apache/zeppelin/livy/LivySparkSQLInterpreter.java
index 9389d4d..48e4967 100644
--- a/livy/src/main/java/org/apache/zeppelin/livy/LivySparkSQLInterpreter.java
+++ b/livy/src/main/java/org/apache/zeppelin/livy/LivySparkSQLInterpreter.java
@@ -169,8 +169,9 @@ public class LivySparkSQLInterpreter extends BaseLivyInterprereter {
     }
 
     for (String line : lines) {
+      // Only match format "|....|"
       // skip line like "+---+---+" and "only showing top 1 row"
-      if (!line.matches("(\\+\\-+)+\\+") || line.contains("only showing")) {
+      if (line.matches("^\\|.*\\|$")) {
         List<String> cells = new ArrayList<>();
         for (Pair pair : pairs) {
           // strip the blank space around the cell

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8774f807/livy/src/test/java/org/apache/zeppelin/livy/LivySQLInterpreterTest.java
----------------------------------------------------------------------
diff --git a/livy/src/test/java/org/apache/zeppelin/livy/LivySQLInterpreterTest.java b/livy/src/test/java/org/apache/zeppelin/livy/LivySQLInterpreterTest.java
index a764fba..9065f35 100644
--- a/livy/src/test/java/org/apache/zeppelin/livy/LivySQLInterpreterTest.java
+++ b/livy/src/test/java/org/apache/zeppelin/livy/LivySQLInterpreterTest.java
@@ -83,17 +83,37 @@ public class LivySQLInterpreterTest {
     //    |  2| 2b|
     //    |  3| 3c|
     //    +---+---+
+    //    only showing top 3 rows
     rows = sqlInterpreter.parseSQLOutput("+---+---+\n" +
         "|  a|  b|\n" +
         "+---+---+\n" +
         "|  1| 1a|\n" +
         "|  2| 2b|\n" +
         "|  3| 3c|\n" +
-        "+---+---+");
+        "+---+---+\n" +
+        "only showing top 3 rows");
     assertEquals(4, rows.size());
     assertEquals("a\tb", rows.get(0));
     assertEquals("1\t1a", rows.get(1));
     assertEquals("2\t2b", rows.get(2));
     assertEquals("3\t3c", rows.get(3));
+
+
+    //  sql output with 1 rows and showing "only showing top 1 rows"
+    //    +---+
+    //    |  a|
+    //    +---+
+    //    |  1|
+    //    +---+
+    //    only showing top 1 rows
+    rows = sqlInterpreter.parseSQLOutput("+---+\n" +
+        "|  a|\n" +
+        "+---+\n" +
+        "|  1|\n" +
+        "+---+\n" +
+        "only showing top 1 rows");
+    assertEquals(2, rows.size());
+    assertEquals("a", rows.get(0));
+    assertEquals("1", rows.get(1));
   }
 }