Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 用Databricks并行加载小文件_Apache Spark_Pyspark_Databricks_Azure Databricks - Fatal编程技术网

Apache spark 用Databricks并行加载小文件

Apache spark 用Databricks并行加载小文件,apache-spark,pyspark,databricks,azure-databricks,Apache Spark,Pyspark,Databricks,Azure Databricks,我需要处理数千个小日志文件 我选择Databricks来处理这个问题,因为它有很好的并行计算能力,并且可以与托管文件的Azure Blob存储帐户进行良好的交互 经过一些研究,我总是检索相同的代码片段(在PySpark中) 有没有更好的方法?如果日志文件为CSV格式,您会选择平面图吗 谢谢大家! 我目前的解决方案是: content=sc.wholeTextFiles('/mnt/container/foo/*/*/',numPartitions=XX) parsed_content=conte

我需要处理数千个小日志文件

我选择Databricks来处理这个问题,因为它有很好的并行计算能力,并且可以与托管文件的Azure Blob存储帐户进行良好的交互

经过一些研究,我总是检索相同的代码片段(在PySpark中)

有没有更好的方法?如果日志文件为CSV格式,您会选择平面图吗


谢谢大家!

我目前的解决方案是:

content=sc.wholeTextFiles('/mnt/container/foo/*/*/',numPartitions=XX)
parsed_content=content.flatMap(自定义_解析器).collect()
我以字符串形式读取文件的所有内容,并保留其文件名。 然后,我使用平面映射将其传递给我的解析函数“custom_parser”,其中custom_parser定义为

def自定义_解析器(*argv):
文件,内容=argv
#施展魔法
返回解析的内容_

我目前正在完成一个.collect()操作,但我将更改此操作以直接保存输出。

如果您的所有文件都在同一目录中(或者您可以将它们移动到同一目录中),则可以在文件夹级别(
spark.read.format('csv').load(“文件夹名称”)
)-通过这种方式,您将利用spark内部并行处理,而不是将每个文件解析为UDF。它们位于分层目录结构“{location}/{yyy}{MM}”中。在这种情况下,如果我将我的文件列表更改为最低目录列表,我会获得任何性能提升吗?如果您可以将目录结构更新为“location/year=YYYY/month=MM/date=DD/*.csv”-然后在读取类似
df=spark.read.format(“csv”)。选项(“header”,“true”)。加载(“cars\u data/”
将自动添加年份,月份和日期作为一列,您可以使用它进行筛选,这肯定会提高性能。@HussainBohra您不必使用配置单元分区。您可以使用通配符:
spark.read.csv(“location/*/*/”)
@OliverW。谢谢你的提示!您还可以使用read.csv进行自定义注释标题解析吗?
# Getting your list of files with custom function
list_of_files = get_my_files()

# Create a path_rdd and use a custom udf to parse it
path_rdd = sc.parallelize(list_of_files)
content = path_rdd.map(parse_udf).collect()