Не удается создать кадры данных Spark Phoenix.

Я пытаюсь загрузить данные из Apache Phoenix в Spark DataFrame.

Мне удалось успешно создать RDD со следующим кодом:

val sc = new SparkContext("local", "phoenix-test")
val sqlContext = new org.apache.spark.sql.SQLContext(sc)

val foo: RDD[Map[String, AnyRef]] = sc.phoenixTableAsRDD(
    table   = "FOO", 
    columns = Seq("ID", "MESSAGE_EPOCH", "MESSAGE_VALUE"), 
    zkUrl   = Some("<zk-ip-address>:2181:/hbase-unsecure"))

foo.collect().foreach(x => println(x))

Однако мне не повезло, пытаясь создать DataFrame. Моя текущая попытка:

val sc = new SparkContext("local", "phoenix-test")
val sqlContext = new SQLContext(sc)

val df = sqlContext.phoenixTableAsDataFrame(
    table   = "FOO", 
    columns = Seq("ID", "MESSAGE_EPOCH", "MESSAGE_VALUE"), 
    zkUrl   = Some("<zk-ip-address>:2181:/hbase-unsecure"))

df.select(df("ID")).show 

К сожалению, приведенный выше код приводит к исключению ClassCastException:

java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericMutableRow cannot be cast to org.apache.spark.sql.Row

Я все еще очень новичок в искрах. Если кто-то может помочь, это будет очень признательно!


person Soto    schedule 11.07.2016    source источник


Ответы (1)


Хотя вы не упомянули свою искровую версию и детали исключения...

Пожалуйста, см. PHOENIX-2287, который исправлен, в котором говорится

Среда: HBase 1.1.1, работающий в автономном режиме на OS X *

Искра 1.5.0 Феникс 4.5.2

Josh Mahonin добавил комментарий - 23/сен/15 17:56 Обновленный патч добавляет поддержку Spark 1.5.0 и обратно совместим с версией 1.3.0 (проверено вручную, профили версий Spark, возможно, стоит посмотреть в будущем) В версии 1.5.0 они явно скрыли структуру данных GenericMutableRow. К счастью, мы можем работать с внешним типом данных 'Row', который обратно совместим и должен оставаться совместимым и в будущих выпусках. В рамках обновления Spark SQL объявил устаревшим конструктор в своем «DecimalType». При обновлении я выявил новую проблему, заключающуюся в том, что мы не переносим точность и масштаб базового типа Decimal в Spark. На данный момент я настроил его на использование значений по умолчанию Spark, но специально для этого я создам еще одну проблему. Я также включил игнорируемый интеграционный тест в этот патч.

person Ram Ghadiyaram    schedule 13.07.2016
comment
вы согласны с моим ответом, пожалуйста. голосование, принятое владельцем, которое помогает другим пользователям в качестве указателя - person Ram Ghadiyaram; 17.07.2016