Pyspark 将行数据转换为键值对

用户7623678

我有一个如下所示的数据文件:

([Fire Grilled Steak Bowl, Veri Veri Teriyaki Marinade & Sauce],1)
([Fat Free Strawberry Yogurt, Strawberry Banana Juice],1)
([Organic  Unsweetened & Salt Free Sunflower Seed Butter, Organic Broccoli Crowns],1)
([Roma Tomato, Vanilla Soymilk],3)
([15 Calories Light Lemonade, Lemon-Lime 12 Pack Soda],1)]

当我将这些数据放入 RDD 中时,

data=sc.textFile("hdfs:\\h1:9000\data.txt")
data.collect()

输出如下所示

['([Fire Grilled Steak Bowl, Veri Veri Teriyaki Marinade & Sauce],1)', '([Fat Free Strawberry Yogurt, Strawberry Banana Juice],1)', '([Organic  Unsweetened & Salt Free Sunflower Seed Butter, Organic Broccoli Crowns],1)', '([Roma Tomato, Vanilla Soymilk],3)', '([15 Calories Light Lemonade, Lemon-Lime 12 Pack Soda],1)']

我正在使用 pyspark 并希望将此 RDD 转换为键值对,其中列表[item1,item2]将是键,逗号后的数字将是值。当我尝试访问它时x[0]x[1]我最终分别得到([应该很简单,我不明白如何获取x[0]=[item1,item2]x[1]=num

泡利

您的源数据似乎以不方便的格式存储。它几乎就像是一个打印的元组,但是字符串周围没有引号阻止您将该行作为对象进行评估。

但是,从您提供的示例中,您似乎可以通过分隔逗号和去除括号来获得所需的输出。

之后,您可以map()根据需要调用和构建您的键值对。

data = [
    '([Fire Grilled Steak Bowl, Veri Veri Teriyaki Marinade & Sauce],1)',
    '([Fat Free Strawberry Yogurt, Strawberry Banana Juice],1)',
    '([Organic Unsweetened & Salt Free Sunflower Seed Butter, Organic Broccoli Crowns],1)',
    '([Roma Tomato, Vanilla Soymilk],3)',
    '([15 Calories Light Lemonade, Lemon-Lime 12 Pack Soda],1)'
]
rdd = sc.parallelize(data)

rdd.map(lambda row: map(lambda x: x.strip().strip("[]()"), row.split(",")))\
    .map(lambda row: ((row[0], row[1]), int(row[2]))).collect()

哪个打印:

[(('Fire Grilled Steak Bowl', 'Veri Veri Teriyaki Marinade & Sauce'), 1),
 (('Fat Free Strawberry Yogurt', 'Strawberry Banana Juice'), 1),
 (('Organic Unsweetened & Salt Free Sunflower Seed Butter', 'Organic Broccoli Crowns'), 1),
 (('Roma Tomato', 'Vanilla Soymilk'), 3),
 (('15 Calories Light Lemonade', 'Lemon-Lime 12 Pack Soda'), 1)]

这假设每行正好有 3 个逗号。如果文本中有任何逗号,此方法将不起作用。如果该假设无效,那么我的建议是修改生成这些文件的程序以生成更友好的格式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将标准的python键值字典列表转换为pyspark数据框

来自分类Dev

Pyspark:将PythonRDD转换为数据框

来自分类Dev

将列表转换为 pyspark 数据框

来自分类Dev

将 Pandas 转换为 Pyspark

来自分类Dev

将pyspark数据框转换为标记点对象

来自分类Dev

PySpark-将行列表转换为数据框

来自分类Dev

将列表转换为pyspark中的数据框列

来自分类Dev

无法使用pyspark数据帧将utm转换为latlong

来自分类Dev

将数据框转换为行列表pyspark胶

来自分类Dev

将pyspark数据框转换为python词典列表

来自分类Dev

将pyspark数据帧转换为嵌套的json结构

来自分类Dev

PySpark:将RDD [DenseVector]转换为数据框

来自分类Dev

在pyspark中将行数组转换为字符串数组

来自分类Dev

Pyspark:将 pyspark.sql.row 转换为 Dataframe

来自分类Dev

将numpy矩阵转换为pyspark rdd

来自分类Dev

pyspark:将DataFrame转换为RDD [string]

来自分类Dev

将PySpark DenseVector转换为数组

来自分类Dev

Pyspark将小数转换为日期

来自分类Dev

将pyspark列转换为列表

来自分类Dev

将Pandas Python转换为Pyspark

来自分类Dev

将查询从SQL转换为pyspark

来自分类Dev

使用pyspark将RDD转换为DataFrame

来自分类Dev

Pyspark:将多个列转换为数字

来自分类Dev

将datetime转换为pyspark上的日期

来自分类Dev

Pyspark:将 RDD 转换为 RowMatrix

来自分类Dev

pyspark 将 Unix 时间转换为日期

来自分类Dev

将列的字典从不同的数据帧转换为数据帧:pyspark

来自分类Dev

将列表转换为数据框,然后在pyspark中加入不同的数据框

来自分类Dev

通过 pyspark.sql.dataframe 将 XML 数据转换为 Pandas 数据帧