【问题标题】:How to convert a dataframe column to sequence如何将数据框列转换为序列
【发布时间】:2019-01-10 01:15:56
【问题描述】:

我有一个如下的数据框:

+-----+--------------------+
|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"))

【问题讨论】:

    标签: scala apache-spark dataframe apache-spark-sql


    【解决方案1】:

    您可以使用collect_listcollect_set 函数:

    import org.apache.spark.sql.functions.{collect_list, collect_set}
    
    df.groupBy($"label").agg(collect_list($"term").alias("term"))
    

    在 Spark HiveContext,而在 Spark 2.0+ 中,您必须在 SessionBuilder 中启用配置单元支持。见Use collect_list and collect_set in Spark SQL

    【讨论】:

    • 我使用的是 Spark 1.4.1-hadoop2.6.0.jar。从上面的编辑帖子可以看出,我已经尝试过了。仍然无法使用这些功能。我错过了什么?
    • 据我记得这些在 1.4 中不可用(不过你应该真正更新。从那时起性能和功能有了巨大的提升,更不用说即将到来的 2.0 引入了一些重大更改)。在 1.4 中,您应该能够使用原始 SQL 查询,例如 here
    • 好的,当我将它更新到 1.6 时,我可以编译了。但是,这次我得到了以下错误: javax.jdo.JDOFatalUserException: Class org.datanucleus.api.jdo.JDOPersistenceManagerFactory is not found
    • 是的,终于成功了。不把所有必要的 jar 文件放在 spark/lib 文件夹中是我的坏事。使用时我的所有问题都解决了。谢谢@zero323!
    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 2019-06-26
    • 2019-04-18
    • 1970-01-01
    • 2019-05-16
    • 2020-07-29
    • 2019-04-16
    • 2017-01-27
    相关资源
    最近更新 更多