Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark Pyspark:在不聚合的情况下重塑数据_Apache Spark_Pyspark_Contingency - Fatal编程技术网

Apache spark Pyspark:在不聚合的情况下重塑数据

Apache spark Pyspark:在不聚合的情况下重塑数据,apache-spark,pyspark,contingency,Apache Spark,Pyspark,Contingency,我想在pyspark中将数据从4x3重塑为2x2,而不进行聚合。我的当前输出如下: columns=['failure'、'value\u HIGH'、'count'] VAL=[ (1, 0, 141), (0, 0, 140), (1, 1, 21), (0, 1, 12) ] 我想要的是一个列联表,第二列是两个新的二进制列(value\u HIGH\u 1,value\u HIGH\u 0),以及count列中的值-意思是: columns=['faulture'、'value\u HI

我想在pyspark中将数据从4x3重塑为2x2,而不进行聚合。我的当前输出如下:

columns=['failure'、'value\u HIGH'、'count']
VAL=[
(1, 0, 141),
(0, 0, 140),
(1, 1, 21),
(0, 1, 12)
]
我想要的是一个列联表,第二列是两个新的二进制列(
value\u HIGH\u 1
value\u HIGH\u 0
),以及
count
列中的值-意思是:

columns=['faulture'、'value\u HIGH\u 1'、'value\u HIGH\u 0']
VAL=[
(1, 21, 141),
(0, 12, 140)
]

您可以使用带有伪最大聚合的
pivot
(因为每个组只有一个元素):

导入pyspark.sql.F函数
df.groupBy('faulted')。pivot('value_HIGH')。agg(F.max('count'))。selectExpr(
'faulture'、'1'作为值'u high'u 1'、'0'作为值'u high'u 0'
).show()
+------+------------+------------+
|故障|值|高| 1 |值|高| 0|
+------+------------+------------+
|     0|          12|         140|
|     1|          21|         141|
+------+------------+------------+

您可以使用带有伪最大聚合的
pivot
(因为每个组只有一个元素):

导入pyspark.sql.F函数
df.groupBy('faulted')。pivot('value_HIGH')。agg(F.max('count'))。selectExpr(
'faulture'、'1'作为值'u high'u 1'、'0'作为值'u high'u 0'
).show()
+------+------------+------------+
|故障|值|高| 1 |值|高| 0|
+------+------------+------------+
|     0|          12|         140|
|     1|          21|         141|
+------+------------+------------+
使用
groupby
pivot
是最好的选择,但是如果您想避免任何聚合,您可以通过
过滤器和
加入

导入pyspark.sql.f函数
df.其中(“值高=1”)。选择(“故障”,f.col(“计数”)。别名(“值高=1”))\
.加入(
df.其中(“值高=0”)。选择(“故障”,f.col(“计数”)。别名(“值高=1”),
on=“故障”
)\
.show()
#+------+------------+------------+
#|故障|值|高|值|高| 1|
#+------+------------+------------+
#|     0|          12|         140|
#|     1|          21|         141|
#+------+------------+------------+
使用
groupby
pivot
是最好的选择,但是如果您想避免任何聚合,您可以通过
过滤器和
加入

导入pyspark.sql.f函数
df.其中(“值高=1”)。选择(“故障”,f.col(“计数”)。别名(“值高=1”))\
.加入(
df.其中(“值高=0”)。选择(“故障”,f.col(“计数”)。别名(“值高=1”),
on=“故障”
)\
.show()
#+------+------------+------------+
#|故障|值|高|值|高| 1|
#+------+------------+------------+
#|     0|          12|         140|
#|     1|          21|         141|
#+------+------------+------------+

不错。但是,作为他的一项要求,我们不能在不聚合的情况下实现这一点吗?@Prazy我不知道spark甚至sql都有这样的语法。旋转时始终会涉及聚合-@Psidom在这种情况下,您可以将
值=[0,1]
作为第二个参数传递给,这更有效。@pault Good call-Nice one。但是,作为他的一项要求,我们不能在不聚合的情况下实现这一点吗?@Prazy我不知道spark甚至sql都有这样的语法。旋转时始终会涉及聚合-@Psidom在这种情况下,您可以将
值=[0,1]
作为第二个参数传递给,这会更有效。@pault很好的调用-