从csv文件向现有apache spark数据帧添加数据

时间:2016-09-16 14:40:36

标签: python apache-spark pyspark spark-dataframe

我有一个火花数据框,有两列:名称,年龄如下:

[Row(name=u'Alice', age=2), Row(name=u'Bob', age=5)]

数据框是使用

创建的
sqlContext.createDataFrame()

接下来我需要做的是从外部'csv'文件中添加第三列'UserId'。外部文件有几列,但我只需要包含第一列,即'UserId':

enter image description here

两个数据源中的记录数相同。我在windows os上使用独立的pyspark版本。最终结果应该是一个包含三列的新数据框:UserId,Name,Age。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我用熊猫来完成这项工作。它允许以多种不同的方式连接数据帧。

1)我们首先需要只导入那个额外的列(删除标题后,虽然这也可以在导入后完成)并将其转换为RDD

from pyspark.sql.types import StringType
from pyspark import SQLContext
sqlContext = SQLContext(sc)
userid_rdd = sc.textFile("C:……/userid.csv").map(lambda line: line.split(","))

2)转换'用户ID' RDD成火花数据帧

userid_df = userid_rdd.toDF(['userid'])
userid_df.show()

3)转换用户ID'将数据帧转换为pandas数据帧

userid_toPandas = userid_df.toPandas()
userid_toPandas

4)将'预测'数据帧(现有数据帧)转换为pandas数据帧

predictions_toPandas = predictions.toPandas() 
predictions_toPandas

5)使用'concat'

将两个pandas数据帧合并为一个新的数据帧
import pandas as pd
result = pd.concat([userid_toPandas, predictions_toPandas], axis = 1, ignore_index = True)
result

答案 1 :(得分:0)

您可以通过连接两个数据框来完成此操作,但为此您需要在booth表中使用id或其他键。我建议只要将行复制到excel文件,如果行的位置相同,则没有足够的信息来合并它们。

答案 2 :(得分:0)

您可以从csv。

创建新的数据框
    sc = SparkContext.getOrCreate()
    sqlContext = SQLContext(sc)

    # Import the csv file to the SparkSQL table.

    df = sqlContext.read.csv("abc.csv")
    df.createOrReplaceTempView(table_a)

    # Create a new dataframe with only the columns required. In your case only user id
     df_1 = spark.sql("select userid from table_a")

    #Now do a join with the existing dataframe which has the original data. ( [Row(name=u'Alice', age=2), Row(name=u'Bob', age=5)] )
    # Lets call the original alice-bob dataframe as df_ori. So,

    df_result = df_ori.join(df_1, how=inner, on= (any column cols if there are any or index row)