Apache spark 如何将HiveQL查询转换为相应的数据帧操作?

Apache spark 如何将HiveQL查询转换为相应的数据帧操作?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,在我的用例中,我在myRDD.map()函数中使用了hivecontext。我得到一个错误,java.lang nullpointerexception。我意识到,在映射逻辑中使用hiveContext是不可能的。hivecontext用于向另一个表(conf)发出hiveql查询。hiveContext.sql()。查询是这样的 select config_date, filefilter, family, id from mydb.conf where id == 178 and

在我的用例中,我在myRDD.map()函数中使用了hivecontext。我得到一个错误,java.lang nullpointerexception。我意识到,在映射逻辑中使用hiveContext是不可能的。hivecontext用于向另一个表(conf)发出hiveql查询。hiveContext.sql()。查询是这样的

select config_date, filefilter, family, id from mydb.conf where     
id == 178 and config_date < cast("2011-02-04 13:05:41.0" as 
timestamp) and family == "drf" order by config_date desc limit 1 
从mydb.conf中选择配置日期、文件过滤器、系列、id,其中
id==178,配置日期
我决定在驱动程序代码中的映射过程开始之前创建此表的数据帧。并在映射逻辑中执行数据帧操作。基本上,我们希望通过dataframe进行方法调用,而不是使用hivecontext进行查询。

可能吗?有人能在这里帮助我如何在数据帧上复制此查询吗?

是的,将您的配置单元查询转换为数据集是完全可能的

您只需
spark.sql(您的queryhere)
或重写查询以使用sparksql的datasetapi

只需使用
spark.read.table(“mydb.conf”)
加载Hie表,然后进行筛选和排序

val conf = spark.
  read.
  table("mydb.conf").
  select("config_date", "filefilter", "family", "id").
  ... // you know the rest

然后,您可以
将此数据集与另一个数据集连接起来,并应用连接的转换,这将避免在地图内部使用
hiveContext

感谢您的回复。我有一个主配置单元表,我从中创建了一个数据帧。对于该表的每一行,都会执行一个业务逻辑(在映射内)。使用行的某些元素作为输入,业务逻辑联系另一个配置单元表以检索更多的信息。我不是火花专家。我创建了hivecontext.sql(),但失败了。然后,我创建了另一个表的数据框,并在映射过程中使用。由于相同的错误而失败。您建议我使用联接两个数据集并执行联接转换。隐马尔可夫模型。。我试试这个。