Это может быть очень простой вопрос, но я новичок в 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
, но это также не работает.