Apache spark Pyspark:在不聚合的情况下重塑数据
我想在pyspark中将数据从4x3重塑为2x2,而不进行聚合。我的当前输出如下: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
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很好的调用-