首页 > 解决方案 > 如何在传递给flatmap的函数中返回数据

问题描述

我在以下架构中有一个数据文件:

+--------------------+-------------------+
|           full_text|                 id|
+--------------------+-------------------+

我想将每条记录更改为成对的(令牌,ID)。例如对于记录,Hi, how are you, 1010我希望它转换为:

(hi, 1010)
(how, 1010)
(are, 1010)
(you, 1010)

所以我通过以下方式使用 SparkSql 做到了:

data = spark.read.json("../input/Spark_tweets.json").select("full_text", "id")
data.rdd.map(lambda data : (data[0], data[1]))\
    .flatMap(lambda row: generateWordPlusId(row[0], row[1])).saveAsTextFile("out")

并且该generateWordPlusId功能可以:

def generateWordPlusId(sentence, id):
    t = []
    for i in [word for word in sentence.lower().split()]:
        t.append((i, id))
    return tuple(t)

它可以按需要工作。我的问题是我们传递给flatMap方法的函数,就像generateWordPlusId在我的例子中,究竟应该返回什么?我将数据插入二维数组,最后将其转换为元组以返回。这种典型的方法是经过优化的还是有更好的方法来做到这一点?

标签: pysparkapache-spark-sqlpyspark-sql

解决方案


推荐阅读