使用Spark SQL时,无法将B转换为java.lang.String

时间:2015-03-24 04:18:21

标签: python apache-spark pyspark

我的问题是,当我尝试将sql.Row中的数据作为String读取时。我使用的是pyspark,但我也听说过Scala API也存在这个问题。

pyspark.sql.Row对象是一个非常不妥协的生物。抛出以下异常:

java.lang.ClassCastException: [B cannot be cast to java.lang.String
 at org.apache.spark.sql.catalyst.expressions.GenericRow.getString(Row.scala 183)

所以我们所拥有的是其中一个字段被表示为字节数组。以下python打印结构不起作用

repr(sqlRdd.take(2))

另外

import pprint
pprint.pprint(sqlRdd.take(2))

两者都会导致ClassCastException。

那么......其他人怎么做到这一点?我开始自己滚动(不幸的是不能在这里复制/粘贴..)但这有点重新发明轮子......或者我怀疑。

1 个答案:

答案 0 :(得分:3)

尝试

sqlContext.setConf("spark.sql.parquet.binaryAsString", "true")

我认为自Spark 1.1.0以来他们打破了它 - 读取二进制文件作为字符串用于工作,然后他们使它不起作用,但添加了这个标志,但将其默认设置为false。