yan*_*hen 14 dataframe pyspark
100000,20160214,93374987
100000,20160214,1925301
100000,20160216,1896542
100000,20160216,84167419
100000,20160216,77273616
100000,20160507,1303015
Run Code Online (Sandbox Code Playgroud)
我想读取第一行没有列名的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")
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
Dav*_*yne 34
您可以将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)
Run Code Online (Sandbox Code Playgroud)
应该管用.
Cli*_*der 17
对于那些想在 Scala 中执行此操作并且可能不想添加类型的人:
val df = spark.read.format("csv")
.option("header","false")
.load("hdfs_filepath")
.toDF("var0","var1","var2","var3")
Run Code Online (Sandbox Code Playgroud)
您可以使用读取数据header=False,然后传递列名称,toDF如下所示:
data = spark.read.csv('data.csv', header=False)
data = data.toDF('name1', 'name2', 'name3')
Run Code Online (Sandbox Code Playgroud)