我有一个火花数据框,有两列:名称,年龄如下:
[Row(name=u'Alice', age=2), Row(name=u'Bob', age=5)]
数据框是使用
创建的sqlContext.createDataFrame()
接下来我需要做的是从外部'csv'文件中添加第三列'UserId'。外部文件有几列,但我只需要包含第一列,即'UserId':
两个数据源中的记录数相同。我在windows os上使用独立的pyspark版本。最终结果应该是一个包含三列的新数据框:UserId,Name,Age。
有什么建议吗?
答案 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)