如何在spark textFile函数中使用自定义换行符?

问题描述 投票:1回答:1

我在文件中有以下数据:

用户:测试

评论:测试

参考:Test1 Test2 Test3

#####

用户:Test1

评论:Test1

参考:Test2 Test3 Test4

...

现在我要检查的是,哪个用户最常提及的内容。这意味着,“用户”和“参考”之间必须存在关联。当使用以下代码时,每一行成为RDD中的一个元素:

elements = sc.textFile(path_to_file)

此时,不再可能使用诸如map()之类的函数在“ User”和“ References”值之间建立关联,因为RDD的元素被独立对待。

是否可以告诉textFile()函数使用自定义定界符,而不是换行符? (在上述情况下,它将是5#)

对此问题还有其他解决方案吗?

python apache-spark pyspark
1个回答
0
投票

您可以尝试这种方法:

  import spark.implicits._
  import org.apache.spark.sql.functions._

  val r1 = spark.sparkContext.textFile("data/splithash.txt")
  val rdd = r1.filter(!_.trim().equals(""))
    .filter(!_.equals("#####"))
    .zipWithIndex()
    .map(s => (s._1, Math.ceil(s._2/3).toInt))

  val df = rdd.toDF()
  df.show()

  df.groupBy('_2).agg(collect_list('_1)).show(false)
    +--------------------+---+
    |                  _1| _2|
    +--------------------+---+
    |          User: Test|  0|
    |       Comment: Test|  0|
    |References: Test1...|  0|
    |         User: Test1|  1|
    |      Comment: Test1|  1|
    |References: Test2...|  1|
    +--------------------+---+

    +---+------------------------------------------------------------+
    |_2 |collect_list(_1)                                            |
    +---+------------------------------------------------------------+
    |1  |[User: Test1, Comment: Test1, References: Test2 Test3 Test4]|
    |0  |[User: Test, Comment: Test, References: Test1 Test2 Test3]  |
    +---+------------------------------------------------------------+
© www.soinside.com 2019 - 2024. All rights reserved.