Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 3.x 根据节点数拆分我的数据帧_Python 3.x_Pyspark_Nodes_Cluster Computing - Fatal编程技术网

Python 3.x 根据节点数拆分我的数据帧

Python 3.x 根据节点数拆分我的数据帧,python-3.x,pyspark,nodes,cluster-computing,Python 3.x,Pyspark,Nodes,Cluster Computing,我正试图根据(集群的)节点数拆分数据帧 我的数据框看起来像: 如果我的node=2,dataframe.count=7: 因此,采用迭代方法,拆分的结果将是: 2行,节点2->2行,节点1->1行(1是模的结果)“> 我的问题是:我如何做到这一点?您可以使用一个rdd分区函数来做到这一点(查看下面的代码),但我不推荐使用它,因为 只要你没有完全意识到你在做什么以及为什么要这样做。一般来说(或者对于大多数用例来说更好),最好让spark处理数据分发 导入pyspark.sql.F函数 进口it

我正试图根据(集群的)节点数拆分数据帧

我的数据框看起来像:

如果我的node=2,dataframe.count=7:

因此,采用迭代方法,拆分的结果将是:

2行,节点2->2行,节点1->1行(1是模的结果)“>

我的问题是:我如何做到这一点?

您可以使用一个rdd分区函数来做到这一点(查看下面的代码),但我不推荐使用它,因为
只要你没有完全意识到你在做什么以及为什么要这样做。一般来说(或者对于大多数用例来说更好),最好让spark处理数据分发

导入pyspark.sql.F函数
进口itertools
输入数学
#创建随机数据帧
l=[(x,x+2)表示范围(1009)内的x]
列=['1','2']
df=spark.createDataFrame(l,列)
#在分区上创建以分配分区密钥
df=df.聚结(1)
#节点数(=分区)
pCount=5
#创建分区键列表
#基本上,它会重复范围(5)几次,直到每行有足够的键为止
partitionKey=list(itertools.chain.from_iterable(itertools.repeat(x,math.ceil(df.count()/pCount))用于范围内的x(pCount)))
#现在我们可以将数据分发到分区
df=df.rdd.partitionBy(pCount,partitionFunc=lambda x:partitionKey.pop()).toDF()
#这显示了每个分区中的记录数
df.withColumn(“partition\u id”,F.spark\u partition\u id()).groupBy(“partition\u id”).count().show()
输出:

+------+
|分区| id |计数|
+------------+-----+ 
|           1|  202| 
|           3|  202| 
|           4|  202| 
|           2|  202| 
|           0|  201| 
+------------+-----+

您的预期结果是什么?两个对象(即两个数据帧)或一个对象在集群上具有均匀分布的数据?我的预期结果是根据节点数拆分数据帧组(也就是说,如果我的数据帧中有10行和3个节点,第一个节点将有3行,第二个节点有3行,3d节点有3行,最后一行将在一个节点中(迭代方法),但是你想要多少个对象?四个或三个对象,还是只有一个?如果你的意思是一个对象是数据帧,我想要一个数据帧(大小可变)谢谢你,但在转换为DF的部分出现了一个问题。[阶段10:>(0+1)/1]19/07/26 16:38:08错误执行者:阶段10.0(TID 10)文件“C:\Users\AppData\Local\Programs\Python\Python37-32\lib\site packages\pyspark\rdd.py”中任务0.0中的异常“,第1771行,在迭代器中为k,v添加\u shuffle\u键:ValueError:没有足够的值来解包(预期为2,得到1)您的分区键列表是否足够长(即等于或大于df.count())?您能将整个错误消息添加到初始问题中吗?是的,我的分区键大于df.count()),我添加了整个错误消息,您在哪里添加了整个错误消息?顺便问一下,我的示例对您有效吗?是的,您的示例对我有效,(整个错误消息如下)