如何在spark中的空数据框中插入值

时间:2016-08-03 08:10:34

标签: pyspark apache-spark-sql spark-dataframe pyspark-sql

我正在使用SPARK sql开发一个spark应用程序,我的工作之一是从两个表中选择值并将其插入一个空表,这是我的结果。但为此我正在尝试使用spark来创建一个空表,我已经创建了一个空的数据框但是无法将其注册为表,这里是我现在的情况代码

ArrayList

它显示的是数据帧,但我不确定它是否是注册,因为没有值

from pyspark import SQLContext
from pyspark.sql.types import StructType,StructField,StringType,DateType,IntegerType
sqlc=SQLContext(sc)

schema= StructType([StructField("Name",StringType(),False),StructField("AGE",IntegerType(),False),StructField("DATE",DateType(),False)])

dataframe=sqlc.createDataFrame([],schema)
dataframe.show()

我认为我在这里犯了错误,所以对于这个问题,我想插入一些测试值,但我无法做到。我是新的火花,所以不知道我怎么能解决这种情况。我已经浏览了一些论坛,我已经看到一些论坛用户提到了parallelize()方法创建表但我没有正确理解它是如何工作的。是否必须使用hive上下文进行操作?我的要求是在没有hive环境的情况下完成这项工作请指导我

2 个答案:

答案 0 :(得分:3)

简短回答:你不是。

Spark数据帧构建在RDD之上,它们是 immutable 。这有点难以在开始时习惯,但你可以使用它。

您可以通过在现有的转换上运行一些转换(例如在spark-sql中使用SQL语句),通过读取一些输入数据或通过 sqlContext.createDataFrame手动输入数据来创建全新的DataFrame(。 ..)

有什么特别的理由说明为什么你不能用结果创建一个新的DataFrame并在需要时将其注册为表?

编辑:我不确定我是否理解您的问题......也许我提出的建议正是您想做的事情。在那种情况下:

df = sqlContext.createDataFrame([("val1","val2","val1")], ["colName1", "colName2", "colName3"])

答案 1 :(得分:0)

  

parallelize()创建表的方法,但我没有正确理解它是如何工作的。

简单地说 - parallize方法接受一系列输入,并从中创建输入拆分。

  

对于这个问题,我想插入一些测试值

您需要平行化Dataframe Row对象列表或创建文件,并在其上映射SQL架构

  

我的工作是从两张桌子中选择价值

然后从那里开始。对两个表写一个SELECT语句,它返回一个新表,你注册并可以写出来到数据库/磁盘