使用Spark Dataframe API计算列中的特定字符

And*_*rle 3 apache-spark pyspark spark-dataframe

我在Spark Dataframe中有一个包含列的列df.列是格式的字符串:

10001010000000100000000000000000
10001010000000100000000100000000
Run Code Online (Sandbox Code Playgroud)

有没有一种简单有效的方法来创建新列"no_of_ones"并使用Dataframe计算频率?使用RDD我可以map(lambda x:x.count('1'))(pyspark).另外,如何检索列表的位置?

phi*_*ert 8

我能想到的一种方法是删除所有零,然后计算字段的长度.

df.show
+--------------------+
|          bytestring|
+--------------------+
|10001010000000100...|
|10001010000000100...|
+--------------------+


df.withColumn("no_of_ones" , length(regexp_replace($"bytestring", "0", "")) ).show
+--------------------+----------+
|          bytestring|no_of_ones|
+--------------------+----------+
|10001010000000100...|         4|
|10001010000000100...|         5|
+--------------------+----------+
Run Code Online (Sandbox Code Playgroud)