如何计算通过%&插入spark数据帧中的列?

时间:2018-01-29 17:26:52

标签: apache-spark pyspark pyspark-sql

我正在从HDFS读取数据到火花数据帧。根据{{​​1}}值,我需要在Status列中插入1/0/-1的值Passed/Failed/Aborted或者我们是否有可能计算Pass%。

quality

1 个答案:

答案 0 :(得分:4)

如果数据如下所示:

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"))是列具有特定值的记录的一部分。您可以在Count number of non-NaN entries in each column of Spark dataframe with Pyspark

中找到其他详细信息

您还可以按此处percentage count per group and pivot with pyspark显示计算和计算点数。