拆分数据时 Spark-Sql 出现问题

Issue with Spark-Sql while splitting data

我正在 casandra 2.1.12 上测试来自 spark-1.5.1 的一些基本查询。当我尝试按“=”拆分数据时出现此有线问题,即 table 中的操作列。它正确地解析了'|'的情况。它returns 个性。为什么会这样。

此外,action 列的值未完全显示。那么,如何在 stdout 上查看列的完整值。

 import org.apache.spark.sql.cassandra.CassandraSQLContext
    import org.apache.spark.sql.cassandra._
    import org.apache.spark.sql

    val csc = new CassandraSQLContext(sc)
    csc.setKeyspace("test")

    val maxDF = csc.sql("select action, split(action, '=')[0], split(action, '=')[1], split(action, '=')[2] from testdata" )

    maxDF.show

拆分'='的输出

    scala> maxDF.show
    +--------------------+------+-----------+---------+
    |              action|   _c1|        _c2|      _c3|
    +--------------------+------+-----------+---------+
    | car=10.288|city=262|   car|10.288|city|      262|
    |kms=0-|year=0-|bu...|   kms|    0-|year|0-|budget|
    |city=40|pc=40|car=10|  city|      40|pc|   40|car|
    |city=40|pc=40|car...|  city|      40|pc|   40|car|
    |city=40|pc=40|car...|  city|      40|pc|   40|car|
    |                pn=1|    pn|          1|     null|
    | city=10|pc=10|car=9|  city|      10|pc|   10|car|
    |city=10|pc=10|car...|  city|      10|pc|   10|car|
    |city=10|pc=10|car...|  city|      10|pc|   10|car|
    |city=10|pc=10|car...|  city|      10|pc|   10|car|
    |city=10|pc=10|car...|  city|      10|pc|   10|car|
    |  city=10|pc=10|pn=1|  city|      10|pc|    10|pn|
    |   year=0-|so=1|sc=0|  year|      0-|so|     1|sc|
    |year=0-|so=1|sc=0...|  year|      0-|so|     1|sc|
    |             year=8-|  year|         8-|     null|
    |budget=6-12|city=...|budget|  6-12|city|    10|pc|
    |budget=6-12|city=...|budget|  6-12|city|    10|pc|
    |budget=6-12|city=...|budget|  6-12|city|    10|pc|
    |budget=6-12|city=...|budget|  6-12|city|    10|pc|
    |car=9.266|city=24...|   car| 9.266|city|   246|pc|
    +--------------------+------+-----------+---------+
    only showing top 20 rows

拆分'|'的输出

val maxDF = csc.sql("select action, split(action, '|')[0], split(action, '|')[1], split(action, '|')[2] from testdata" )

    maxDF.show

    +--------------------+---+---+---+
    |              action|_c1|_c2|_c3|
    +--------------------+---+---+---+
    | car=10.288|city=262|   |  c|  a|
    |kms=0-|year=0-|bu...|   |  k|  m|
    |city=40|pc=40|car=10|   |  c|  i|
    |city=40|pc=40|car...|   |  c|  i|
    |city=40|pc=40|car...|   |  c|  i|
    |                pn=1|   |  p|  n|
    | city=10|pc=10|car=9|   |  c|  i|
    |city=10|pc=10|car...|   |  c|  i|
    |city=10|pc=10|car...|   |  c|  i|
    |city=10|pc=10|car...|   |  c|  i|
    |city=10|pc=10|car...|   |  c|  i|
    |  city=10|pc=10|pn=1|   |  c|  i|
    |   year=0-|so=1|sc=0|   |  y|  e|
    |year=0-|so=1|sc=0...|   |  y|  e|
    |             year=8-|   |  y|  e|
    |budget=6-12|city=...|   |  b|  u|
    |budget=6-12|city=...|   |  b|  u|
    |budget=6-12|city=...|   |  b|  u|
    |budget=6-12|city=...|   |  b|  u|
    |car=9.266|city=24...|   |  c|  a|
    +--------------------+---+---+---+

split(action, '\|') 对我来说仍然有同样的问题。我不得不使用 split(action, '\\|')

竖线“|”将一系列备选方案分开,在您的情况下没有备选方案,因此它只是 returns 来自该字符的最长匹配模式,即字符。

使用split(action, '\|')