count (), show () работают очень медленно на агрегированных данных, но работают нормально на необработанных данных - PullRequest
0 голосов
/ 10 января 2019

Это может быть очень простой вопрос, но я новичок в pyspark & ​​zeppelin.
Я читаю паркет из s3 в zeppelin, используя контекст pyspark, а затем запускаю над ним агрегаты.
mydf.show() & mydf.count() работают нормально (запускаются в течение 5 минут) для необработанных данных, импортированных из s3, но после того, как я агрегирую, фильтрую или выполняю какие-либо другие операции с моим фреймом данных, они очень очень медленные (занимают более часа) ).
Может кто-нибудь подсказать, почему это происходит и что я могу сделать, чтобы они работали быстрее?

Я уже пробовал различные способы агрегирования, например, использование spark.sql, groupBy.agg, но, похоже, ничего не изменилось. Также я освободил место в кластере, удалив / удалив все временные файлы и кадры данных.

%spark2.pyspark

from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark import SparkConf
from pyspark.sql import SparkSession
import pandas as pd
sc = SparkContext.getOrCreate()

sqlContext = SQLContext(sc)

df = sqlContext.read.parquet("path.parquet")

from pyspark.sql.types import DateType

df = df.withColumn("datet",df['timestamp'].cast(DateType()))

df = df[["keeping required columns"]]

df.show() #working fine

from pyspark.sql import SQLContext

df.createOrReplaceTempView("dftempview")

df1 = spark.sql("select _col1, sum(_col2) _col2, count(*) _col3 from dftempview where _col1 is not null or _col1 != '' group by _col1")

spark.catalog.dropTempView("dftempview")

df1.show() #taking more than an hour to show dataframe

#Also tried

df1 = df.groupBy("_col1").agg(sum("_col2").alias("_col2"))

df1.show() #taking same time

Я также пытался создать временное представление в контексте SQL и запустить select count(*), sum(_col2) from mydftempview, но это также не работает.

...