Python pyspark处理文本文件

Python pyspark处理文本文件,python,apache-spark,Python,Apache Spark,我有一个像这样的文件,我在PythonRDD中读过 [(u'id1', u'11|12|13|14|15|16|17|18|,21|22|23|24|25|26|27|28|), (u'id2', u'31|32|33|34|35|36|37|38|,41|42|43|44|45|46|47|28|)] 表示:RDD是一个pairRDD,其中每个键都是一个用户id(id1、id2),每个值都有多个记录(用逗号分隔),每个记录都有多个项(用管道分隔) 我想减少这个文件,这样每个id:(id1和i

我有一个像这样的文件,我在PythonRDD中读过

[(u'id1', u'11|12|13|14|15|16|17|18|,21|22|23|24|25|26|27|28|), (u'id2', u'31|32|33|34|35|36|37|38|,41|42|43|44|45|46|47|28|)]
表示:RDD是一个pairRDD,其中每个键都是一个用户id(id1、id2),每个值都有多个记录(用逗号分隔),每个记录都有多个项(用管道分隔)

我想减少这个文件,这样每个id:(id1和id2)将发出与记录数一样多的行,其中用户id作为键,第7个字段/5个字段,第6个字段作为值

id1 => 17/15, 16
id1 => 27/25, 26
id3 => 37/35, 36
id4 => 47/45, 46
非常感谢您的帮助

尝试一下这样的方法(flatMap就是诀窍):


非常感谢。我尝试使用flatMap,但它不起作用。我不知道FlatMapValue。我检查了文档,但没有提到,,,flatMapValues在1.1.0文档中提到,但当我打印它时,它打印在一个文件中,如:(u'id1',u'text',number)。。。。如何在没有“(”、“u”和“')”的文件中打印此文件。。。由于ALS algo需要这个文件,所以我需要一个没有大括号的简单格式的输出文件,并使用.map将元组转换成字符串
.map(lambda(idx,(data1,data2)):“{0}:{1},{2}”。format(idx,data1,data2))
Python字符串格式工具也非常实用。
input=[(u'id1', u'11|12|13|14|15|16|17|18|,21|22|23|24|25|26|27|28|'), (u'id2', u'31|32|33|34|35|36|37|38|,41|42|43|44|45|46|47|28|')]
inputRdd=sc.parallelize(input)

def splitAtPipe(value):
  valueParts=value.split('|')
  return (valueParts[6]+"/"+valueParts[4],valueParts[5])

inputRdd.flatMapValues(lambda data: data.split(","))
  .mapValues(splitAtPipe)
  .map(lambda (idx, (data1, data2)): (idx, data1, data2))
  .collect()

# Result
# [(u'id1', u'17/15', u'16'), (u'id1', u'27/25', u'26'), (u'id2', u'37/35', u'36'), (u'id2', u'47/45', u'46')]