如何将PySpark RDD转换为具有未知列的Dataframe?

时间:2017-04-07 19:44:02

标签: python dataframe pyspark rdd

我通过从RDD中的文本文件加载数据来创建PySpark。现在我想将此RDD转换为dataframe,但我不知道RDD中有多少列和哪些列。我正在尝试使用createDataFrame(),并显示的语法为sqlDataFrame = sqlContext.createDataFrame(rdd, schema)。我试图了解如何创建schema,但大多数示例都显示了硬编码的架构创建示例。现在因为我不知道列是什么,所以如何将rdd转换为dataframe?到目前为止,这是我的代码:

from pyspark import SQLContext
sqlContext = SQLContext(sc)

example_rdd = sc.textFile("\..\file1.csv")
               .map(lambda line: line.split(",")) 

#convert the rdd into a dataframe
# df = sc.createDataFrame() # dataframe conversion here.

注意1:我不知道列的原因是因为我正在尝试创建一个通用脚本,该脚本可以从任意列数的任何文件中读取RDD创建数据帧。

注意2:我知道有另一个名为toDF()的函数可以将RDD转换为数据帧,但是我也有与传递未知列相同的问题。

注3:文件格式不仅仅是csv文件。我已经将它展示给一个例子,但它可以是任何格式的文件

1 个答案:

答案 0 :(得分:4)

Spark 2.0.0以后支持直接读取csv作为DataFrame。要读取csv,请使用DataFrameReader.csv方法

df = spark.read.csv("\..\file1.csv", header=True)

在您的情况下,如果您无权访问spark对象,则可以使用

from pyspark import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.csv("\..\file1.csv", header=True)

如果文件有不同的分隔符,您也可以指定它。

# Eg if separator is ::
df = spark.read.csv("\..\file1.csv", head=True,sep="::")