pyspark - 如何在传递给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
在我的例子中,究竟应该返回什么?我将数据插入二维数组,最后将其转换为元组以返回。这种典型的方法是经过优化的还是有更好的方法来做到这一点?
解决方案
推荐阅读
- linux - LeakSanitizer 不能在 Ubuntu 18.04 的 gdb 下工作?
- bash - (Ubuntu bash 脚本)从配置 txt 设置权限
- javascript - 递归提示函数返回null
- alexa-skills-kit - 如何制作 Alexa 示例应用程序(语音服务)来调用/调用自定义技能?
- java - 使用 Selenium 工具的自动化脚本
- matlab - 在 MATLAB 上使用 Alexnet/Googlenet 等进行图像分割
- structuremap - 使用 StructureMap 在对象层次结构之间共享数据
- azure - 我想使用 Powershell 将我的 Web 应用程序的特定文件和文件夹备份到 Blob 存储
- android - 我可以使用智能手机生物识别传感器扫描公共指纹吗
- c++ - C++ - 在 Windows 上是否有任何命令喜欢 addr2line