【问题标题】:Issue with Spark-Sql while splitting data拆分数据时出现 Spark-Sql 问题
【发布时间】:2016-03-17 19:31:43
【问题描述】:

我正在 casandra 2.1.12 上测试来自 spark-1.5.1 的一些基本查询。当我尝试按“=”(即表中的操作列)拆分数据时遇到此有线问题。它可以正确解析“|”的情况。它返回单个字符。为什么会这样。

此外,动作列的值没有完整显示。那么,如何在标准输出上查看列的完整值。

 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,"\=") 或类似的东西...

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


【解决方案1】:

竖管“|”分隔一系列备选方案,在您的情况下没有备选方案,因此它只是返回该字符自己的最长匹配模式,即该字符。

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

【讨论】:

  • 您能否更详细地解释一下series of alternatives 的含义。我是新来的火花。所以,不知道或它。此外,如何查看列的完整值。目前我们看到... 是长字符串。另外,我们可以将此输出写入文件,即 csv 或任何其他格式
  • '\\|' 对我有同样的问题。我不得不使用'\\\\|'
  • @Naresh Alternatives in regex pattern。第二部分就是它的显示方式。 sql 调用返回 DataFrame,因此您可以使用 this example 保存到 csv
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2023-01-11
    相关资源
    最近更新 更多