2

我的问题是当我试图从 asql.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。

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

4

1 回答 1

3

尝试

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

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

于 2015-09-18T09:42:36.760 回答