在databricks中工作,我有一个dataframe,看起来像这样:
columns = ["a", "b", "c"]
data = [(True, True, True), (True, True, True), (True, False, True)]
df = spark.createDataFrame(data).toDF(*columns)
df.display()
我想创建一个新的列“number_true_values”,它包含每行True值的数量。不幸的是,在pyspark中似乎不能像pandas那样只对True和False值求和。代码
import pyspark.sql.functions as F
df.withColumn('number_true_values', sum([F.col(column) for column in df.columns]))
抛出异常AnalysisException: [DATATYPE_MISMATCH.BINARY_OP_DIFF_TYPES] Cannot resolve "(a + 0)" due to data type mismatch: the left and right operands of the binary operator have incompatible types ("BOOLEAN" and "INT").;
如果我有一个包含数字的 Dataframe ,而不是像下面这样...
columns = ["a", "b", "c"]
data = [(1, 0, 1), (1, 0, 0), (1, 1, 1)]
df = spark.createDataFrame(data).toDF(*columns)
df.display()
...上面的语法将工作并返回所需的结果:
如何计算数据块中每行True值的数量?
2条答案
按热度按时间isr3a4wc1#
你可以将列转换为
long
,然后求和,就像这样,输出:
h7appiyu2#
虽然最简单的方法已经提到,你也可以创建一个数组,并根据要计数的值过滤数组。它可以用于任何值,而不仅仅是T/F。
下面是一个示例