Apache spark 将主数据文件加载到spark生态系统
在构建日志处理系统时,我遇到了一个场景,在这个场景中,我需要从树文件(如DB)中查找每个日志行对应值的数据。将非常大的外部文件加载到spark生态系统中的最佳方法是什么?树文件的大小为2GB 这是我的设想Apache spark 将主数据文件加载到spark生态系统,apache-spark,pyspark,Apache Spark,Pyspark,在构建日志处理系统时,我遇到了一个场景,在这个场景中,我需要从树文件(如DB)中查找每个日志行对应值的数据。将非常大的外部文件加载到spark生态系统中的最佳方法是什么?树文件的大小为2GB 这是我的设想 我有一个文件包含大量的日志行 每个日志行需要用分隔符拆分为70个字段 需要从树文件中查找日志行70个字段之一的数据 我使用的是ApacheSparkPythonAPI,运行在一个3节点集群上 下面是我写的代码。但是它真的很慢 def process_logline(line, tree):
def process_logline(line, tree):
row_dict = {}
line_list = line.split(" ")
row_dict["host"] = tree_lookup_value(tree, line_list[0])
new_row = Row(**row_dict)
return new_row
def run_job(vals):
spark.sparkContext.addFile('somefile')
tree_val = open(SparkFiles.get('somefile'))
lines = spark.sparkContext.textFile("log_file")
converted_lines_rdd = lines.map(lambda l: process_logline(l, tree_val))
log_line_rdd = spark.createDataFrame(converted_lines_rdd)
log_line_rdd.show()
我认为可以使用spark dataframes并将这两个文件作为dataframes加载,然后进行连接。这将比使用spark rdd api更快。由于数据不是纯文本文件,因此我们无法在此执行联接,我们需要使用此树查找值方法从树文件中获取数据。在这种情况下,您可以编写spark UDF(可能是矢量化的)并在UDF中使用树查找值。其他文本文件可以读取为df,您可以应用此udf,我认为您可以使用spark dataframes并将这两个文件作为dataframes加载,然后进行连接。这将比使用spark rdd api更快。由于数据不是纯文本文件,因此我们无法在此执行联接,我们需要使用此树查找值方法从树文件中获取数据。在这种情况下,您可以编写spark UDF(可能是矢量化的)并在UDF中使用树查找值。其他文本文件可以读取为df,您可以在该文件上应用此udf