Вы можете получить число символов всего файла, используя Counter
над символами. Тогда процент каждого символа равен count for that character/total count
.
from collections import Counter
from itertools import chain
with open(filename) as f:
counts = Counter(chain.from_iterable(f))
total = sum(counts.values())
for character, count in counts.items():
print('{:<2} - {:>6.2f}%'.format(repr(character)[1:-1], (count/total) * 100))
Для текста
Mary had a little lamb.
Это печатает
M - 4.17%
a - 16.67%
r - 4.17%
y - 4.17%
- 16.67%
h - 4.17%
d - 4.17%
l - 12.50%
i - 4.17%
t - 8.33%
e - 4.17%
m - 4.17%
b - 4.17%
. - 4.17%
\n - 4.17%
Объединение на фрейме данных вызывает много перетасовки данных между исполнителями. В вашем случае вы можете обойтись без объединения. Используйте спецификацию окна для разделения данных на «lable» и «year» и агрегирования в окне.
from pyspark.sql.window import *
windowSpec = Window.partitionBy('lable','year')\
.rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)
df = df.withColumn("std", f.round(f.stddev("val").over(windowSpec), 2))