Я новичок в pyspark, поэтому я чувствую, что мне здесь не хватает чего-то простого и глупого, но мне не хватает этого.Я прочитал содержимое файла паркета в фрейм данных искры.Затем я группирую двоичный столбец и подсчитываю результаты.Числа разные каждый раз.Это проблема синхронизации данных между узлами искры или это как-то связано с отложенным выполнением или я просто упускаю какой-то базовый фундаментальный принцип искры?Я очень смущен этими результатами.
df = spark.read.parquet(input_file)
df = df.limit(2000)
print(df.count())
print(df.groupBy('STATUS').count().collect())
print(df.groupBy('STATUS').count().collect())
print(df.groupBy('STATUS').count().collect())
>>> 2000
>>> [Row(STATUS=0, count=1613), Row(STATUS=1, count=387)]
>>> [Row(STATUS=0, count=1528), Row(STATUS=1, count=472)]
>>> [Row(STATUS=0, count=1646), Row(STATUS=1, count=354)]
Ниже приведена схема df:
root
|-- GRP_ID: long (nullable = true)
|-- WEK_ID: long (nullable = true)
|-- WEK_BGN_DT: string (nullable = true)
|-- WEK_END_DT: string (nullable = true)
|-- FEATURES: vector (nullable = true)
|-- STATUS: long (nullable = true)
Я также должен отметить, что если я преобразую фрейм данных spark в pandas и получу счетчик, работает просто отлично:
dfp = df.toPandas()
print(dfp['STATUS'][dfp['STATUS'] == 0].count())
print(dfp['STATUS'][dfp['STATUS'] == 1].count())
print(dfp['STATUS'][dfp['STATUS'] == 0].count())
print(dfp['STATUS'][dfp['STATUS'] == 1].count())
print(dfp['STATUS'][dfp['STATUS'] == 0].count())
print(dfp['STATUS'][dfp['STATUS'] == 1].count())
>>> 1494
>>> 506
>>> 1494
>>> 506
>>> 1494
>>> 506