2016-05-12 62 views
2

我有如下一個數據幀:如何轉換一個數據幀列進行排序

+-----+--------------------+ 
|LABEL|    TERM| 
+-----+--------------------+ 
| 4| inhibitori_effect| 
| 4| novel_therapeut| 
| 4| antiinflammator...| 
| 4| promis_approach| 
| 4|  cell_function| 
| 4|   cell_line| 
| 4|  cancer_cell| 

我要採取一切條款順序,這樣我可以Word2vec使用它們來創建一個新的數據幀。那就是:

+-----+--------------------+ 
|LABEL|    TERM| 
+-----+--------------------+ 
| 4| inhibitori_effect, novel_therapeut,..., cell_line | 

因此,我想申請這個示例代碼在這裏給出:https://spark.apache.org/docs/latest/ml-features.html#word2vec

到目前爲止,我已經嘗試DF轉換爲RDD和映射。然後我無法設法將其重新轉換爲df。

在此先感謝。

編輯:

import org.apache.spark.{SparkContext, SparkConf} 
import org.apache.spark.sql.hive.HiveContext 
import org.apache.spark.sql.SQLContext 

val sc = new SparkContext(conf) 
    val sqlContext: SQLContext = new HiveContext(sc) 

    val df = sqlContext.load("jdbc",Map(
     "url" -> "jdbc:oracle:thin:...", 
     "dbtable" -> "table")) 

    df.show(20) 

    df.groupBy($"label").agg(collect_list($"term").alias("term")) 

回答

3

您可以使用collect_listcollect_set功能:

import org.apache.spark.sql.functions.{collect_list, collect_set} 

df.groupBy($"label").agg(collect_list($"term").alias("term")) 

火花< 2.0它需要HiveContext和星火2.0+您必須啓用SessionBuilder蜂巢支持。請參閱Use collect_list and collect_set in Spark SQL

+0

我正在使用Spark 1.4.1-hadoop2.6.0.jar。我已經嘗試過,可以通過上面的編輯帖子看到。仍然不能使用這些功能。我錯過了什麼? –

+0

據我記憶,這些在1.4中不可用(你應該真的更新,從那時起,性能和功能有了巨大的提升,更不用說即將推出的2.0引入了一些重大改變)。在1.4中,您應該能夠使用原始SQL查詢,例如[here](http://stackoverflow.com/a/34296928/1560062)。 – zero323

+0

現在好了,當我更新到1.6我可以編譯。但是,這一次我得到了以下錯誤:javax.jdo.JDOFatalUserException:未找到類org.datanucleus.api.jdo.JDOPersistenceManagerFactory –

相關問題