首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算传递%&插入火花数据中的列?

如何计算传递%&插入火花数据中的列?
EN

Stack Overflow用户
提问于 2018-01-29 17:26:52
回答 1查看 165关注 0票数 2

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

代码语言:javascript
复制
df = sparkSession.read.json(hdfsPath)

+-----------+---------+
|         ID|Status   |
+-----------+---------+
|Tsz3650419c|   Passed|
|Tsz3650420c|   Failed|
|Tsz3650421c|   Passed|
|Tsz3650422c|   Passed|
|Tsz3650423c|  Aborted|
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-29 17:39:09

如果数据如下所示:

代码语言:javascript
复制
from pyspark.sql.functions import avg, col, when

df = spark.createDataFrame([
    ("Tsz3650419c", "Passed"), ("Tsz3650420c", "Failed"),
    ("Tsz3650421c", "Passed"), ("Tsz3650422c", "Passed"),
    ("Tsz3650423c", "Aborted")
]).toDF("ID", "Status")

定义级别:

代码语言:javascript
复制
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那样进行枢轴和计算计数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48506775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档