我有以下格式的数据。
abc,x1,x2,x3def,x1,x3,x4,x8,x9ghi,x7,x10,x11我想要的输出是
0,abc,[x1,x2,x3]1,def,[x1,x3,x4,x8,x9]2,ghi,[x7,x10,x11]
您的数据不是CSV格式。 CSV表示具有固定架构的逗号分隔文本文件。您的数据的CSV将是:
abc,x1,x2,x3,, def,x1,x3,x4,x8,x9 ghi,x7,x10,x11,,
请注意第1行和第1行中的尾随逗号。 3,不在您的数据中。
由于您的文本文件不是CSV,因此在Spark中获取所需模式的方法是在Python中读取整个文件,解析为您想要的内容然后使用 spark.crateDataFrame() 。或者,如果目录中有多个这样的文件,请使用 SparkContext.wholeTextFiles 然后 flatMap 你的解析功能。
spark.crateDataFrame()
SparkContext.wholeTextFiles
flatMap
假设你已经做过类似的事情 open("Your File.txt").readlines ,其余的很简单:
open("Your File.txt").readlines
import re from pyspark.sql import * lines = [ "abc, x1, x2, x3", "def, x1, x3, x4,x8,x9", "ghi, x7, x10, x11" ] split = re.compile("\s*,\s*") Line = Row("id", "first", "rest") def parse_line(id, line): tokens = split.split(line.strip) return Line(id, tokens[0], tokens.pop(0)) def parse_lines(lines): return [parse_line(i, x) for i,x in enumerate(lines)] spark.createDataFrame(parse_lines(lines))