Apache spark 使用pyspark在循环中附加Spark数据帧的有效方法
我有“|”分隔的巨大文本文件,我想合并所有文本文件并创建一个巨大的spark数据框,稍后将使用pyspark用于ETL过程 效率低下的方式 1) 创建一个空的spark数据帧df 2) 在循环中,将文本文件读取为spark dataframe df1,并将其附加到空spark dataframe dfApache spark 使用pyspark在循环中附加Spark数据帧的有效方法,apache-spark,pyspark,apache-spark-sql,pyspark-sql,pyspark-dataframes,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,Pyspark Dataframes,我有“|”分隔的巨大文本文件,我想合并所有文本文件并创建一个巨大的spark数据框,稍后将使用pyspark用于ETL过程 效率低下的方式 1) 创建一个空的spark数据帧df 2) 在循环中,将文本文件读取为spark dataframe df1,并将其附加到空spark dataframe df df = spark.createDataFrame([],schema) for x in os.listdir(textfiles_dir): filepath = '{}/{}'.f
df = spark.createDataFrame([],schema)
for x in os.listdir(textfiles_dir):
filepath = '{}/{}'.format(textfiles_dir,x)
df1 = spark.read.format("csv") \
.option("header", "true") \
.option("delimiter", "|") \
.option("inferSchema","true") \
.load(filepath)
df = df.union(df1)
这不是一种有效的点火方式
有人能提出一种有效的方法吗?
如果用示例代码进行解释,那就太好了
谢谢:)
正如其他人所指出的,您将希望以数据帧的形式读取整个文本文件目录,而不是迭代读取每个目录:
df = spark.read.format("csv") \
.option("header", "true") \
.option("delimiter", "|") \
.option("inferSchema","true") \
.load(textfiles_dir)
如果您真的想使用union路径,我建议您使用SparkContext()中的union
函数,而不是DataFrame中的union函数:
dfs = []
for x in os.listdir(textfiles_dir):
filepath = '{}/{}'.format(textfiles_dir,x)
df1 = spark.read.format("csv") \
.option("header", "true") \
.option("delimiter", "|") \
.option("inferSchema","true") \
.load(filepath)
dfs.append(df1)
df = spark.sparkContext.union(dfs)
正如其他人所指出的,您将希望以数据帧的形式读取整个文本文件目录,而不是迭代读取每个目录:
df = spark.read.format("csv") \
.option("header", "true") \
.option("delimiter", "|") \
.option("inferSchema","true") \
.load(textfiles_dir)
如果您真的想使用union路径,我建议您使用SparkContext()中的union
函数,而不是DataFrame中的union函数:
dfs = []
for x in os.listdir(textfiles_dir):
filepath = '{}/{}'.format(textfiles_dir,x)
df1 = spark.read.format("csv") \
.option("header", "true") \
.option("delimiter", "|") \
.option("inferSchema","true") \
.load(filepath)
dfs.append(df1)
df = spark.sparkContext.union(dfs)
filepath=存在多个文件的目录的filepath
dataframe=spark.read.format(“csv”).选项(“header”,“true”).选项(“delimiter”,“|”).加载(filepath)filepath=存在多个文件的目录的filepath
dataframe=spark.read.format(“csv”).选项(“header”,“true”).选项(“delimiter”,“|”).加载(filepath)一次加载路径列表即全部加载路径列表即全部