2016-07-21 36 views
1

我目前正在使用:我可以使用SELECT从数据框而不是创建此临时表吗?

+---+-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
|id |sen      |attributes                                     | 
+---+-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
|1 |Stanford is good college.|[[Stanford,ORGANIZATION,NNP], [is,O,VBZ], [good,O,JJ], [college,O,NN], [.,O,.], [Stanford,ORGANIZATION,NNP], [is,O,VBZ], [good,O,JJ], [college,O,NN], [.,O,.]]| 
+---+-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ 

I want to get above df from : 
+----------+--------+--------------------+ 
|article_id|  sen|   attribute| 
+----------+--------+--------------------+ 
|   1|example1|[Standford,Organi...| 
|   1|example1|   [is,O,VP]| 
|   1|example1| [good,LOCATION,ADP]| 
+----------+--------+--------------------+ 

使用:

df3.registerTempTable("d1") 
val df4 = sqlContext.sql("select article_id,sen,collect(attribute) as attributes from d1 group by article_id,sen") 

有没有,我没有登记临时表,作为同时节省了数据帧,它给很多垃圾什么办法! ! lige df3.Select“”??

+1

我不明白你在做什么。请检查您的问题!我现在投票结束,因为目前还不清楚。 – eliasah

+0

@eliasah - 看看答案,我的意思是这样的! –

+0

如果给定的答案解决了你的问题,请接受它,否则评论为什么它为你工作! – eliasah

回答

1

Spark当前必须针对数据框运行SQL的唯一方法是通过临时表。但是,您可以将隐式方法添加到DataFrame以自动执行此操作,正如我们在Swoop所做的那样。我无法共享所有代码,因为它使用了一些我们的内部实用程序&暗指,但核心位于以下gist。使用唯一临时表的重要性在于(至少在Spark 2.0之前)临时表是集群全局的。

我们在我们的工作中经常使用这种方法,特别是因为在很多情况下SQL比Scala DSL更容易编写和理解。

希望这会有所帮助!

相关问题