如何读取没有标题的csv并在pyspark中读取时用名字命名?

时间:2017-06-15 03:42:00

标签: dataframe pyspark

100000,20160214,93374987
100000,20160214,1925301
100000,20160216,1896542
100000,20160216,84167419
100000,20160216,77273616
100000,20160507,1303015

我想读取第一行没有列名的csv文件。 如何读取它并在同一时间用我指定的名称命名列? 现在,我只是使用我指定的名称重命名原始列:

df = spark.read.csv("user_click_seq.csv",header=False)
df = df.withColumnRenamed("_c0", "member_srl")
df = df.withColumnRenamed("_c1", "click_day")
df = df.withColumnRenamed("_c2", "productid")

有更好的方法吗?

2 个答案:

答案 0 :(得分:26)

您可以将csv文件导入具有预定义架构的数据框中。定义模式的方法是使用StructTyoe和StructField对象。假设您的数据都是IntegerType数据:

from pyspark.sql.types import StructType, StructField, IntegerType

schema = StructType([
    StructField("member_srl", IntegerType(), True),
    StructField("click_day", IntegerType(), True),
    StructField("productid", IntegerType(), True)])

df = spark.read.csv("user_click_seq.csv",header=False,schema=schema)

应该有效。

答案 1 :(得分:2)

对于那些希望在scala中执行此操作并且可能不想添加类型的人:

val df = spark.read.format("csv")
                   .option("header","false")
                   .load("hdfs_filepath")
                   .toDF("var0","var1","var2","var3")