Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法在spark中执行2个连续分组_Python_Csv_Apache Spark - Fatal编程技术网

Python 无法在spark中执行2个连续分组

Python 无法在spark中执行2个连续分组,python,csv,apache-spark,Python,Csv,Apache Spark,我正在与Spark合作开发python 我的问题是:我有一个.csv文件,其中包含一些数据(int1、int2、int3、date)。我在int1上做了一个groupByKey。现在,我想用第一个groupBy创建的rdd在我的日期执行另一个groupBy 问题是我做不到。有什么想法吗 问候 编辑2: 从pyspark导入SparkContext 导入csv 导入系统 导入StringIO sc = SparkContext("local", "Simple App") file = sc.te

我正在与Spark合作开发python

我的问题是:我有一个
.csv
文件,其中包含一些数据(int1、int2、int3、date)。我在
int1
上做了一个
groupByKey
。现在,我想用第一个
groupBy
创建的rdd在我的日期执行另一个
groupBy

问题是我做不到。有什么想法吗

问候

编辑2: 从pyspark导入SparkContext 导入csv 导入系统 导入StringIO

sc = SparkContext("local", "Simple App")
file = sc.textFile("histories_2week9.csv")

 csvById12Rdd=file.map(lambda (id1,id2,value): ((id1,id2),value)).groupByKey()
 csvById1Rdd=csvById12Rdd.map(lambda ((id1,id2),group):(id1, (id2,group))).groupByKey()



def printit(one):
  id1, twos=one
  print("Id1:{}".format(id1))
    for two in twos:
      id2, values=two
      print("Id1:{} Id2:{}".format(id1,id2))
     for value in values:
        print("Id1:{} Id2:{} Value:{}".format(id1,id2,value))


  csvById12Rdd.first().foreach(printit)
csv就像 31705,48,22014-10-28T18:14:09.000Z

编辑3:

我可以用这段代码打印迭代器数据

from pyspark import SparkContext

import csv
import sys
import StringIO

sc = SparkContext("local", "Simple App")
file = sc.textFile("histories_2week9.csv")

def go_in_rdd2(x):
  print x[0]
  for i in x[1]:
      print i

counts = file.map(lambda line: (line.split(",")[0],line.split(",")[1:]))
counts = counts.groupByKey()
counts.foreach(go_in_rdd2)
但是我仍然无法通过groupBy返回(Key,Iterable[Value])的RDD进行分组,你能用另一种方法吗

  • 根据id1id2进行分组,并得到RDD((id1,id2),Iterable[值])
  • 然后单独按id1分组,得到RDD(id1,Iterable[(Id2,Iterable[Value]))
  • 比如:

    csv=[(1,1,"One","Un"),(1,2,"Two","Deux"),(2,1,"Three","Trois"),(2,1,"Four","Quatre")]
    csvRdd=sc.parallelize(csv)
    # Step 1
    csvById12Rdd=csvRdd.map(lambda (id1,id2,value1,value2): ((id1,id2),(value1,value2))).groupByKey()
    # Step 2
    csvById1Rdd=csvById12Rdd.map(lambda ((id1,id2),group):(id1, (id2,group))).groupByKey()
    # Print    
    def printit(one):
        id1, twos=one
        print("Id1:{}".format(id1))
        for two in twos:
            id2, values=two
            print("Id1:{} Id2:{}".format(id1,id2))
            for value1,value2 in values:
                print("Id1:{} Id2:{} Values:{} {}".format(id1,id2,value1,value2))
    
    csvById1Rdd.foreach(printit)
    

    如果有错误消息,您的工作是否崩溃,我们需要更多信息来回答问题谢谢您的时间。当我尝试你的方法时,当你的打印函数被调用时,我收到一条错误消息,我得到“ValueError:太多的值无法解包”,但我认为我在Spark 1.2.1中用Python 2.7测试的2个groupBy工作。你使用Python3吗?你接受这个答案吗?我使用Python2.7和spark 1.2.1,我猜你在元组中添加了一些值。“ValueError:太多的值无法解包”表示元组的大小不正确,例如,如果您编写了类似“1,2=(1,2,3)”(左手边两个元素,右手边三个元素)的内容,我试图修改您的代码,使其与具有4个字段的csv一起工作,您认为这是一个好主意吗?