У меня около 100 ГБ данных пользователей, и я хочу обработать их с помощью Apache Spark на своем ноутбуке. Я установил oop и Spark, и для теста я загрузил файл размером около 9 ГБ в HDFS и получил доступ к & запросил его, используя pyspak .
В тестовом файле всего 113959238 записей / строк, когда я запросил данные для конкретного пользователя, т.е.
select * from table where userid=????
, для получения записей этого пользователя потребовалось около 6 минут, и если я запустите весь файл, тогда это займет много времени. Анализ, который я должен выполнить для этих данных, состоит в том, чтобы извлечь записи пользователей, выполнить некоторые операции с ними, а затем обработать данные второго пользователя и так далее для всех пользователей в файле. Данные, запрашиваемые пользователем, не будут много, поэтому они могут быть загружены в память и операции могут быть выполнены быстрее. Но запрос записи о пользователе из этого большого файла требует времени и замедлит процесс.
Говорят, что Spark светится быстро, поэтому я наверняка что-то упущу, поэтому так долго. Одна вещь, которую я заметил при выполнении запросов, это то, что Spark не использовал полную оперативную память, а почти 100% ЦП.
Мои характеристики машины:

Я также запрашивал данные непосредственно из текстового файла, используя Spark вместо файла HDFS, но не было большой разницы во времени. Код python, который я написал, -
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession, HiveContext,SQLContext
import time
conf=SparkConf()
conf.set("spark.executor.memory", "8g")
conf.set("spark.driver.memory", "8g")
sparkSession = SparkSession.builder.appName("example-pyspark-read-and-write").getOrCreate()
sc=sparkSession.sparkContext.getOrCreate(conf)
sqlContext=SQLContext(sc)
#df_load = sparkSession.read.format("csv").option("header","true").load("hdfs://0.0.0.0:19000/test.txt")
df_load = sparkSession.read.format("csv").option("header","true").load("C:/Data/test_file/test.txt")
table=df_load.registerTempTable('test')
sp_tstart=time.time()
df=sqlContext.sql("select * from test where user_id='12345'")
db=df.rdd.collect()
sp_tend=time.time()
t_time=sp_tend-sp_tstart
df.show()
print(t_time/60)
Учитывая мои машинные характеристики, Spark занимает нормальное время или мне нужно что-то настраивать? Нужно ли обновлять спецификации или достаточно для этих данных?