分割数据时Spark-Sql的问题

时间:2016-03-17 06:43:02

标签: apache-spark apache-spark-sql spark-dataframe

我正在测试casandra 2.1.12上spark-1.5.1的一些基本查询。当我尝试通过' ='分割数据时出现此有线问题即表中的行动栏。它正确地解析了' |'的情况。它返回单个字符。为什么会如此。

此外,动作栏的值未完全显示。那么,如何在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|
    +--------------------+---+---+---+

2 个答案:

答案 0 :(得分:2)

垂直管道“|”将一系列替代品分开,在你的情况下没有替代品,所以它只返回该角色所拥有的最长匹配模式,即角色。

使用split(action, '\\|')

答案 1 :(得分:1)

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