如何计算 pass% 并插入到 spark dataframe 的列中?
How to calculate pass% & insert into a column in spark dataframe?
我正在将数据从 HDFS 读取到 spark 数据帧中。基于 Status
值,我需要将 Passed/Failed/Aborted
的值 1/0/-1
插入 quality
列中,或者我们是否有可能计算通过 %.
df = sparkSession.read.json(hdfsPath)
+-----------+---------+
| ID|Status |
+-----------+---------+
|Tsz3650419c| Passed|
|Tsz3650420c| Failed|
|Tsz3650421c| Passed|
|Tsz3650422c| Passed|
|Tsz3650423c| Aborted|
如果数据如下所示:
from pyspark.sql.functions import avg, col, when
df = spark.createDataFrame([
("Tsz3650419c", "Passed"), ("Tsz3650420c", "Failed"),
("Tsz3650421c", "Passed"), ("Tsz3650422c", "Passed"),
("Tsz3650423c", "Aborted")
]).toDF("ID", "Status")
定义级别:
levels = ["Passed", "Failed", "Aborted"]
exprs = [
avg((col("Status") == level).cast("double")*100).alias(level)
for level in levels]
df.groupBy("ID").agg(*exprs).show()
# +-----------+------+------+-------+
# | ID|Passed|Failed|Aborted|
# +-----------+------+------+-------+
# |Tsz3650422c| 1.0| 0.0| 0.0|
# |Tsz3650419c| 1.0| 0.0| 0.0|
# |Tsz3650423c| 0.0| 0.0| 1.0|
# |Tsz3650420c| 0.0| 1.0| 0.0|
# |Tsz3650421c| 1.0| 0.0| 0.0|
# +-----------+------+------+-------+
其中 avg((col("Status") == level).cast("double"))
是列具有特定值的记录的一部分。您可以在
中找到更多详细信息
您还可以旋转和计算计数,如此处所示 。
我正在将数据从 HDFS 读取到 spark 数据帧中。基于 Status
值,我需要将 Passed/Failed/Aborted
的值 1/0/-1
插入 quality
列中,或者我们是否有可能计算通过 %.
df = sparkSession.read.json(hdfsPath)
+-----------+---------+
| ID|Status |
+-----------+---------+
|Tsz3650419c| Passed|
|Tsz3650420c| Failed|
|Tsz3650421c| Passed|
|Tsz3650422c| Passed|
|Tsz3650423c| Aborted|
如果数据如下所示:
from pyspark.sql.functions import avg, col, when
df = spark.createDataFrame([
("Tsz3650419c", "Passed"), ("Tsz3650420c", "Failed"),
("Tsz3650421c", "Passed"), ("Tsz3650422c", "Passed"),
("Tsz3650423c", "Aborted")
]).toDF("ID", "Status")
定义级别:
levels = ["Passed", "Failed", "Aborted"]
exprs = [
avg((col("Status") == level).cast("double")*100).alias(level)
for level in levels]
df.groupBy("ID").agg(*exprs).show()
# +-----------+------+------+-------+
# | ID|Passed|Failed|Aborted|
# +-----------+------+------+-------+
# |Tsz3650422c| 1.0| 0.0| 0.0|
# |Tsz3650419c| 1.0| 0.0| 0.0|
# |Tsz3650423c| 0.0| 0.0| 1.0|
# |Tsz3650420c| 0.0| 1.0| 0.0|
# |Tsz3650421c| 1.0| 0.0| 0.0|
# +-----------+------+------+-------+
其中 avg((col("Status") == level).cast("double"))
是列具有特定值的记录的一部分。您可以在
您还可以旋转和计算计数,如此处所示