我有一个数据集,其中98%(早于一天)的数据将在parquet文件中,2%(当前日期-实时提要)的数据将在hbase中,我总是需要合并它们以获得特定表或实体的最终数据集。
因此,我希望我的客户能够像下面这样无缝地使用数据,使用任何语言访问spark,或者通过sparkshell或任何bi工具
spark.read.format("my.datasource").load("entity1")
在内部,我将从parquet和hbase读取entity1的数据,然后将它们合并并返回。
我在google上搜索了一些关于扩展datasourcev2的例子,大多数都说需要开发reader,但这里我不需要新的reader,而是需要使用现有的reader(parquet和hbase)。
因为我没有引入任何新的数据源,所以我需要创建新的数据源吗?或者是否有更高级别的抽象/钩子可用?
2条答案
按热度按时间smtd7mpg1#
在浏览了下面的各种资源之后,我发现并实现了相同的功能。它可能会帮助某人,所以添加它作为答案
只有在引入新数据源时,才需要自定义数据源。为了组合现有的数据源,我们必须扩展sparksession和dataframereader。在扩展Dataframe读取器中,我们可以调用spark-parquet-read方法,hbase-reader并得到相应的数据集,然后将这些数据集合并并返回合并后的数据集。
在scala中,我们可以使用implicits向spark会话和Dataframe添加自定义逻辑。
在java中,我们需要扩展spark会话和dataframe,然后在使用它时使用扩展类的导入
pinkon5k2#
您必须实现一个新的数据源本身“parquet+hbase”,在这个实现中,您将使用parquet和hbase的现有读取器,可能使用它们扩展您的类并将它们联合起来等等
这里有一些链接可以帮助您实现新的数据源,供您参考。
spark“bigquery”数据源实现
https://github.com/googleclouddataproc/spark-bigquery-connector
实现自定义数据源
https://michalsenkyr.github.io/2017/02/spark-sql_datasource