使用 Spark SQL 时获取 B 无法转换为 java.lang.String
Getting B cannot be cast to java.lang.String when using Spark SQL
我的问题是当我尝试从 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。
所以..其他人是怎么做到的?我开始自己动手(不幸的是不能 copy/paste 这里..)但这有点重新发明轮子..我怀疑是这样。
尝试
sqlContext.setConf("spark.sql.parquet.binaryAsString", "true")
我认为自从 Spark 1.1.0 以来,他们就破坏了它 - 读取二进制作为字符串曾经工作,然后他们使它不起作用,但添加了这个标志,但将其默认设置为 false。
我的问题是当我尝试从 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。
所以..其他人是怎么做到的?我开始自己动手(不幸的是不能 copy/paste 这里..)但这有点重新发明轮子..我怀疑是这样。
尝试
sqlContext.setConf("spark.sql.parquet.binaryAsString", "true")
我认为自从 Spark 1.1.0 以来,他们就破坏了它 - 读取二进制作为字符串曾经工作,然后他们使它不起作用,但添加了这个标志,但将其默认设置为 false。