我需要使用自己的自定义函数从表名到Parquet数据运行Spark SQL查询。使用sqlContext.read.parquet
将Parquet数据读取到DataFrame并使用df.registerTempTable
注册DataFrames并不是为了我的用例,因为这些调用必须在SQL查询之前运行,否则我甚至可能不会知道需要什么表。
我没有使用registerTempTable
,而是尝试使用我自己的逻辑编写一个解析表名的Analyzer
。但是,我需要能够将UnresolvedRelation
解析为代表Parquet数据的LogicalPlan
,但sqlContext.read.parquet
会提供DataFrame
,而不是LogicalPlan
。
DataFrame
似乎有logicalPlan
属性,但标记为protected[sql]
。还有一个ParquetRelation
课程,但那是private[sql]
。LogicalPlan
。这就是我找到的方法ostream out (&buff) ;
。
如何使用我自己的逻辑将表名称解析为Parquet?我甚至在使用Analyzer的正确轨道上了吗?
答案 0 :(得分:1)
您实际上可以使用
检索DataFrame的logicalPlan
val myLogicalPlan: LogicalPlan = myDF.queryExecution.logical