【问题标题】:Why SparkSQL didn't return the normal string result?为什么 SparkSQL 没有返回正常的字符串结果?
【发布时间】:2017-05-06 09:21:05
【问题描述】:

我正在使用以下代码从 parquet 读取数据,然后应用 SparkSQL。

data = sqlContext.read.parquet('hdfs://my_hdfs_path/my_db.db/my_table')
data.registerTempTable("table1")
sqlContext.sql("select id, col_A from table1").show(10)

+--------------------+--------------------+
|                  id|              col_A |
+--------------------+--------------------+
|[35 32 34 44 46 4...|[33 45 34 43 31 4...|
|[35 32 34 44 46 4...|[33 45 34 43 31 4...|
|[35 32 34 44 46 4...|[33 45 34 43 31 4...|
|[35 32 34 44 46 4...|[33 45 34 43 31 4...|
|[35 32 34 44 46 4...|[33 45 34 43 31 4...|
|[35 32 34 44 46 4...|[33 45 34 43 31 4...|
|[35 32 34 44 46 4...|[33 45 34 43 31 4...|
|[35 32 34 44 46 4...|[33 45 34 43 31 4...|
|[35 32 34 44 46 4...|[33 45 34 43 31 4...|
|[35 32 34 44 46 4...|[33 45 34 43 31 4...|
+--------------------+--------------------+

但是,表格没有显示列idcol_A 的正常字符串。相反,它显示的是二进制值。如何确保结果显示常规字符串值?谢谢!

【问题讨论】:

  • 您尝试过投射列吗? data.select(data['id'].cast('string'), data['col_A'].cast('string')).show()

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

show 有一个可选参数 truncate,默认设置为 true。如果您想看到一切继续进行,请执行show(10, truncate=false)。请注意,输出不会很好。

【讨论】:

  • 嗨,我的问题是它显示了一些类似二进制的东西,而不是真正的字符串值。例如,id 列应该类似于:“California_SanFrancisco”、“California_SanJose”……等等,但是它显示的是一堆数字。有什么想法吗?
  • @Edamame 我建议看一下底层数据的样子,它过于有条理并且排列得很好,这让我认为底层数据源可能是这里的问题。
猜你喜欢
  • 2011-01-12
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
相关资源
最近更新 更多