我有以下功能需要测试-
private HashMap<String, Dataset<Row>> getDataSources(SparkSession spark) {
HashMap<String, Dataset<Row>> ds = new HashMap<String, Dataset<Row>>();
Dataset<Row>dimTenant = spark.table(dbName + "." + SparkConstants.DIM_TENANT)
.select("tenant_key", "tenant_id");
Map<String, String> options = new HashMap<>();
mockOptions.put("table", bookValueTable);
mockOptions.put("zkUrl", zkUrl);
Dataset<Row> bookValue = spark.read().format("org.apache.phoenix.spark")
.options(options)
.load();
ds.put("dimTenant", dimTenant);
ds.put("bookValue", bookValue);
return ds;
}
在这种情况下,我实际上需要执行
spark.table
,但需要基于spark.read().format(formatParam).options(optionsParam).load()
和formatParam
模拟
optionsParam
的输出
我怎样才能实现这个目标?
最初,我开始用深存根(答案)嘲笑
DataframeReader.class
,但结果是spark.table
本身调用spark.read().table
,因此spark.table
受到了影响。然后我尝试监视 spark.read()
对象,但由于在调用过程中生成了一个新对象,因此它也不起作用。
你可以
spark.read().table()
实现(即 DataframeReader.table()
)dbName + "." + SparkConstants.DIM_TENANT
则调用真正的spark,否则返回虚拟数据/null。请参阅 使用回调进行存根