Как создать собственный структурированный источник потоковой передачи для Apache Spark 2.3.0+ - PullRequest
0 голосов
/ 17 мая 2019

Я являюсь разработчиком в базе данных NoSQL компании Couchbase, в настоящее время работающей над обновлением нашего Spark Connector для поддержки Spark 2.3.

У меня проблема с нашим структурированным потоковым источником CouchbaseSource, который хорошо работает в 2.2, но тестируя в 2.3, я получаю следующее утверждение:

утверждение не выполнено: DataFrame, возвращенный getBatch из com.couchbase.spark.sql.streaming.CouchbaseSource@7c8d604f, не имеет isStreaming = true

Кажется, что CouchbaseSource.getBatch хочет вернуть потоковый DataFrame, а не стандартный, который он в настоящее время делает - но мне сложно это создать. Я пробовал:

  1. Использование DataStreamReader, возвращенного из sqlContext.readStream, на который указывают документы, но в отличие от DataFrameReader, который мы использовали до того, как ни один из методов DataStreamReader не может предоставить существующий RDD в качестве Dataframe, я думаю.

  2. Рассмотрим, как соединитель Azure решил ту же проблему в this commit . Они используют внутренний пакет функций Spark [sql] internalCreateDataFrame, доступ к которому они получают, поместив свою функцию в пакет org.apache.spark.sql.cosmosdb.util. Я понятия не имел, что это законно, и на меня произвела впечатление изобретательность, но наверняка это не рекомендуемый метод?

  3. Я углубился в код internalCreateDataFrame и попытался воссоздать его в своем проекте, но столкнулся с различными проблемами инкапсуляции - например, не имеет доступа к Dataset.ofRows, не может напрямую создать новый набор данных [Row] ...

Единственный учебник, который мне удалось найти, это этот , который использует тот же метод internalCreateDataFrame, что и Azure.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...