小编NIT*_*ITS的帖子

有没有办法计算 Spark df 中每行的非空值?

我有一个非常宽的 df 和大量的列。我需要在 python 中获取每行非空值的计数。

示例 DF -

+-----+----------+-----+-----+-----+-----+-----+-----+
| name|      date|col01|col02|col03|col04|col05|col06|
+-----+----------+-----+-----+-----+-----+-----+-----+
|name1|2017-12-01|100.0|255.5|333.3| null|125.2|132.7|
|name2|2017-12-01|101.1|105.5| null| null|127.5| null|
Run Code Online (Sandbox Code Playgroud)

我想在 col01-col06 中添加一个包含非空值计数的列 -

+-----+----------+-----+-----+-----+-----+-----+-----+-----+
| name|      date|col01|col02|col03|col04|col05|col06|count|
+-----+----------+-----+-----+-----+-----+-----+-----+-----+
|name1|2017-12-01|100.0|255.5|333.3| null|125.2|132.7|    5| 
|name2|2017-12-01|101.1|105.5| null| null|127.5| null|    3|

Run Code Online (Sandbox Code Playgroud)

我能够像这样在 pandas df 中得到这个 -

df['count']=df.loc[:,'col01':'col06'].notnull().sum(axis=1)     
Run Code Online (Sandbox Code Playgroud)

但到目前为止,spark df 还没有运气:( 有什么想法吗?

python apache-spark-sql pyspark

5
推荐指数
1
解决办法
5420
查看次数

Spark DF 数据透视错误:方法数据透视([class java.lang.String, class java.lang.String]) 不存在

我是使用 Spark 数据帧的新手。我尝试pivot在 Spark(Spark 版本 2.x)中使用该方法并遇到以下错误:

Py4JError:调用 o387.pivot 时发生错误。跟踪: py4j.Py4JException:方法数据透视([类 java.lang.String,类 java.lang.String]) 不存在

尽管我有这里的agg功能first,但我确实不需要应用任何聚合。

我的数据框如下所示:

+-----+-----+----------+-----+
| name|value|      date| time|
+-----+-----+----------+-----+
|name1|100.0|2017-12-01|00:00|
|name1|255.5|2017-12-01|00:15|
|name1|333.3|2017-12-01|00:30|

Run Code Online (Sandbox Code Playgroud)

预期的:

+-----+----------+-----+-----+-----+
| name|      date|00:00|00:15|00:30|
+-----+----------+-----+-----+-----+
|name1|2017-12-01|100.0|255.5|333.3|

Run Code Online (Sandbox Code Playgroud)

我正在尝试的方式:

df = df.groupBy(["name","date"]).pivot(pivot_col="time",values="value").agg(first("value")).show
Run Code Online (Sandbox Code Playgroud)

我在这里犯了什么错误?

python apache-spark apache-spark-sql pyspark

3
推荐指数
1
解决办法
2792
查看次数

标签 统计

apache-spark-sql ×2

pyspark ×2

python ×2

apache-spark ×1