首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Pyspark中定义一个空的dataframe并将其附加到相应的dataframe?

如何在Pyspark中定义一个空的dataframe并将其附加到相应的dataframe?
EN

Stack Overflow用户
提问于 2017-04-10 15:00:33
回答 6查看 44K关注 0票数 11

所以我想从一个目录中读取csv文件,作为pyspark dataframe,然后将它们附加到单个dataframe中。而不是像我们在熊猫身上做的那样,在pyspark中得到替代方案。

例如,在熊猫中,我们这样做:

代码语言:javascript
运行
复制
files=glob.glob(path +'*.csv')

df=pd.DataFrame() 

for f in files:
    dff=pd.read_csv(f,delimiter=',')
    df.append(dff)

在Pyspark中,我已经尝试过了,但没有成功

代码语言:javascript
运行
复制
schema=StructType([])
union_df = sqlContext.createDataFrame(sc.emptyRDD(),schema)

for f in files:
    dff = sqlContext.read.load(f,format='com.databricks.spark.csv',header='true',inferSchema='true',delimiter=',')
    df=df.union_All(dff)

会非常感谢你的帮助。

谢谢

EN

回答 6

Stack Overflow用户

发布于 2017-04-10 16:53:12

在spark 2.1中,实现这一点的一种方法如下:

代码语言:javascript
运行
复制
files=glob.glob(path +'*.csv')

for idx,f in enumerate(files):
    if idx == 0:
        df = spark.read.csv(f,header=True,inferSchema=True)
        dff = df
    else:
        df = spark.read.csv(f,header=True,inferSchema=True)
        dff=dff.unionAll(df)
票数 14
EN

Stack Overflow用户

发布于 2017-10-24 06:18:55

首先定义模式,然后可以使用unionAll将新的数据帧连接到空的数据帧,甚至运行迭代将一组数据帧组合在一起。

代码语言:javascript
运行
复制
from pyspark.sql.types import StructType
from pyspark.sql.types import StructField
from pyspark.sql.types import StringType

sc = SparkContext(conf=SparkConf())
spark = SparkSession(sc)     # Need to use SparkSession(sc) to createDataFrame

schema = StructType([
    StructField("column1",StringType(),True),
    StructField("column2",StringType(),True)
])
empty = spark.createDataFrame(sc.emptyRDD(), schema)

empty = empty.unionAll(addOndata)
票数 7
EN

Stack Overflow用户

发布于 2017-04-10 16:14:52

当在2个数据帧上使用"unionAll“时,模式应该是相同的。因此,空数据帧的架构应该与csv架构一致。

例如:

代码语言:javascript
运行
复制
schema = StructType([
    StructField("v1", LongType(), True), StructField("v2", StringType(), False), StructField("v3", StringType(), False)
])
df = sqlContext.createDataFrame([],schema)

或者你可以这样做:

代码语言:javascript
运行
复制
f = files.pop(0)
df = sqlContext.read.load(f,format='com.databricks.spark.csv',header='true',inferSchema='true',delimiter=',')
for f in files:
    dff = sqlContext.read.load(f,format='com.databricks.spark.csv',header='true',inferSchema='true',delimiter=',')
    df=df.union_All(dff)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43316716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档