public static Set<String> getRelations(Dataset<org.apache.spark.sql.Row> dataframe){
LogicalPlan plan = dataframe.queryExecution().analyzed();
return scala.collection.JavaConverters.seqAsJavaListConverter(plan.collectLeaves()).asJava()
.stream()
.map(logicalPlan -> {
if(logicalPlan instanceof CatalogRelation){
CatalogRelation catalogRelation = (CatalogRelation) logicalPlan;
return catalogRelation.tableMeta().database() + "." + catalogRelation.tableMeta().identifier().table();
}
if(logicalPlan instanceof LogicalRelation){
LogicalRelation logicalRelation = (LogicalRelation) logicalPlan;
return logicalRelation.catalogTable().get().database() + "." + logicalRelation.catalogTable().get().identifier().table();
}
return "";
}).collect(Collectors.toSet());
}
Это функция getRelations () для извлечения отношений из вашего Dataframe.
Dataset<org.apache.spark.sql.Row> df = spark.sql("select * from table_a as A join table_b as b where a.pk=b.fk");
Это даст вам набор данных, который вы можете передать getRelations (), чтобы получить ваши отношения в запросе.