【发布时间】:2018-04-22 04:42:17
【问题描述】:
我有一个如下所示的数据文件:
([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。
【问题讨论】:
-
您在寻找
rdd.map(lambda row: (tuple(row[0]), row[1]))吗? -
@pault 当我写
rdd.map(lambda row:(tuple(row[0]), row[1])).take(5)时,它给了我输出[(('(',), '['), (('(',), '['), (('(',), '['), (('(',), '['), (('(',), '[')]而我想要row[0]=[Fire Grilled Steak Bowl, Veri Veri Teriyaki Marinade & Sauce]和row[1]=1 -
您的数据真的是完全这样存储的吗?括号和括号有吗?文本周围没有引号?更好的问题是它是如何结束的?是否有可能在上游某个地方解决问题?你可以构建一个解析器,但这会很复杂。
标签: apache-spark pyspark rdd key-value