如何将数据框的列转换为序列

4

I have a dataframe as below:

+-----+--------------------+
|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"))
1个回答

5
您可以使用collect_listcollect_set函数:
import org.apache.spark.sql.functions.{collect_list, collect_set}

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

在 Spark < 2.0 中需要使用 HiveContext,而在 Spark 2.0+ 中需要在 SessionBuilder 中启用 Hive 支持。详见使用 collect_list 和 collect_set 在 Spark SQL 中


我正在使用Spark 1.4.1-hadoop2.6.0.jar。正如上面编辑的帖子所示,我已经尝试过了。但仍然无法使用这些函数。我错过了什么? - mlee_jordan
据我所记,这些在1.4中不可用(你应该真的更新一下。自那时以来,性能和功能有了巨大的提升,更不用说即将推出的2.0引入了一些重大变化)。在1.4中,您应该能够使用原始SQL查询,例如像这里 - zero323
好的,现在当我将它更新到1.6时,我可以编译。然而,这一次我遇到了以下错误:javax.jdo.JDOFatalUserException: 找不到类org.datanucleus.api.jdo.JDOPersistenceManagerFactory - mlee_jordan
是的,终于成功了。我的问题在于没有将spark/lib文件夹中找到的所有必要jar文件都放置好。当我使用全部jar文件时,问题得以解决。感谢@zero323! - mlee_jordan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接