Я являюсь разработчиком в базе данных 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, а не стандартный, который он в настоящее время делает - но мне сложно это создать. Я пробовал:
Использование DataStreamReader, возвращенного из sqlContext.readStream, на который указывают документы, но в отличие от DataFrameReader, который мы использовали до того, как ни один из методов DataStreamReader не может предоставить существующий RDD в качестве Dataframe, я думаю.
Рассмотрим, как соединитель Azure решил ту же проблему в this commit . Они используют внутренний пакет функций Spark [sql] internalCreateDataFrame, доступ к которому они получают, поместив свою функцию в пакет org.apache.spark.sql.cosmosdb.util. Я понятия не имел, что это законно, и на меня произвела впечатление изобретательность, но наверняка это не рекомендуемый метод?
Я углубился в код internalCreateDataFrame и попытался воссоздать его в своем проекте, но столкнулся с различными проблемами инкапсуляции - например, не имеет доступа к Dataset.ofRows, не может напрямую создать новый набор данных [Row] ...
Единственный учебник, который мне удалось найти, это этот , который использует тот же метод internalCreateDataFrame, что и Azure.
Я буду использовать это, если придется, но это кажется хрупким. Есть ли лучшее решение?