Apache spark 使用Spark合并两个或多个文件内容并操作内容
我可以使用Spark执行以下操作吗? 我有三个文件要合并和更改内容:Apache spark 使用Spark合并两个或多个文件内容并操作内容,apache-spark,awk,sed,pyspark,Apache Spark,Awk,Sed,Pyspark,我可以使用Spark执行以下操作吗? 我有三个文件要合并和更改内容: 第一个名为column_header.tsv的文件包含以下内容: first_name last_name address zip_code browser_type John Doe 111 New Drive, Ca 11111 34 Mary Doe 133 Creator Blvd, NY 44499 40 Mike Coder 13 Jumping Street UT
first_name last_name address zip_code browser_type
John Doe 111 New Drive, Ca 11111 34
Mary Doe 133 Creator Blvd, NY 44499 40
Mike Coder 13 Jumping Street UT 66499 28
first_name last_name address zip_code browser_type
John Doe 111 New Drive, Ca 11111 34
Mary Doe 133 Creator Blvd, NY 44499 40
Mike Coder 13 Jumping Street UT 66499 28
34 Chrome
40 Safari
28 FireFox
first_name last_name address zip_code browser_type
John Doe 111 New Drive, Ca 11111 Chrome
Mary Doe 133 Creator Blvd, NY 44499 Safari
Mike Coder 13 Jumping Street UT 66499 FireFox
这能用火花吗?如果可能的话,我会考虑SED或AWK。我知道Python可以实现上述功能,但我更喜欢使用Spark进行数据操作和更改。有什么建议吗?提前谢谢。这是可能的。读取标题:
with open("column_header.tsv") as fr:
columns = fr.readline().split()
读取数据文件.tsv
:
users = spark.read.option("delimiter", "\t").csv("data_file.tsv").toDF(*columns)
browsers = spark.read.csv("called browser_type.tsv") \
.toDF("browser_type", "browser_name")
读取称为浏览器类型tsv的:
users = spark.read.option("delimiter", "\t").csv("data_file.tsv").toDF(*columns)
browsers = spark.read.csv("called browser_type.tsv") \
.toDF("browser_type", "browser_name")
加入:
这里是awk,以防万一。请注意文件顺序:
$ awk 'NR==FNR{ a[$1]=$2;next }{ $NF=($NF in a?a[$NF]:$NF) }1' file3 file1 file2
输出:
first_name last_name address zip_code browser_type
John Doe 111 New Drive, Ca 11111 Chrome
Mary Doe 133 Creator Blvd, NY 44499 Safari
Mike Coder 13 Jumping Street UT 66499 FireFox
解释:
NR==FNR { # process browser_type file
a[$1]=$2 # remember remember the second of ...
next } # skip to the next record
{ # process the other files
$NF=( $NF in a ? a[$NF] : $NF) } # replace last field with browser from a
1 # implicit print
文件合并和操作在spark中完全可行。在合并行之前,您只需要提出自己的逻辑来操作行。