You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 洗你的头 <12...@qq.com> on 2020/10/27 06:36:17 UTC
pyflink读取csv源表时,如何跳过标题行?如何选取特定的列?
尊敬的开发者您好,
我读取csv数据的源代码如下:
t_env.register_table_source("mySource",
CsvTableSource(r'data\trip\yellow_tripdata_2014-01.csv',
['vendor_id', 'pickup_datetime', 'dropoff_datetime', 'passenger_count',
'trip_distance', 'pickup_longitude', 'pickup_latitude', 'rate_code',
'store_and_fwd_flag', 'dropoff_longitude', 'dropoff_latitude',
'payment_type', 'fare_amount', 'surcharge', 'mta_tax', 'tip_amount',
'tolls_amount', 'total_amount'],
[DataTypes.STRING(), DataTypes.STRING(), DataTypes.STRING(), DataTypes.BIGINT(),
DataTypes.FLOAT(), DataTypes.FLOAT(), DataTypes.FLOAT(), DataTypes.BIGINT(),
DataTypes.STRING(), DataTypes.FLOAT(), DataTypes.FLOAT(),
DataTypes.STRING(), DataTypes.FLOAT(), DataTypes.FLOAT(), DataTypes.FLOAT(), DataTypes.FLOAT(),
DataTypes.FLOAT(), DataTypes.FLOAT()])
)
我这里使用的CsvTableSource的方法,该如何跳过原数据中的标题行呢?同时我只想读取'pickup_longitude', 'pickup_latitude','dropoff_longitude', 'dropoff_latitude'这四列,该如何操作?
该种方法与 connect的OldCsv和Schema方法有什么区别?如果使用connect的方法应该怎样跳过标题行,并选取特定的列呢?
还是说只能在保存原数据表的时候去掉标题行?
期待您的解答。
Re: pyflink读取csv源表时,如何跳过标题行?如何选取特定的列?
Posted by Xingbo Huang <hx...@gmail.com>.
Hi,
1. CsvTableSource的构造方法里面有参数ignore_first_line帮你跳过首行的标题,你可以查看一下。
2.
只想读取那四列应该没办法,主要在于你那几个列不是头部的几个列,比如10列的数据,你要前四列,那是可以的,因为正常读一行数据进来,我解析完前四列就行了,剩下可以不解析,可是要是你的列是1,3,5,7,9这样的,你不指定2,4,6,8列的类型,根本没法帮你把一行的数据给解析出来。
Best,
XIngbo
洗你的头 <12...@qq.com> 于2020年10月27日周二 下午2:36写道:
> 尊敬的开发者您好,
> 我读取csv数据的源代码如下:
> t_env.register_table_source("mySource",
>
> CsvTableSource(r'data\trip\yellow_tripdata_2014-01.csv',
>
> ['vendor_id', 'pickup_datetime', 'dropoff_datetime', 'passenger_count',
>
> 'trip_distance', 'pickup_longitude', 'pickup_latitude', 'rate_code',
>
> 'store_and_fwd_flag', 'dropoff_longitude', 'dropoff_latitude',
>
> 'payment_type', 'fare_amount', 'surcharge', 'mta_tax', 'tip_amount',
>
> 'tolls_amount', 'total_amount'],
>
> [DataTypes.STRING(), DataTypes.STRING(), DataTypes.STRING(), DataTypes.BIGINT(),
>
> DataTypes.FLOAT(), DataTypes.FLOAT(), DataTypes.FLOAT(), DataTypes.BIGINT(),
>
> DataTypes.STRING(), DataTypes.FLOAT(), DataTypes.FLOAT(),
>
> DataTypes.STRING(), DataTypes.FLOAT(), DataTypes.FLOAT(), DataTypes.FLOAT(), DataTypes.FLOAT(),
>
> DataTypes.FLOAT(), DataTypes.FLOAT()])
> )
>
> 我这里使用的CsvTableSource的方法,该如何跳过原数据中的标题行呢?同时我只想读取'pickup_longitude', 'pickup_latitude','dropoff_longitude', 'dropoff_latitude'这四列,该如何操作?
> 该种方法与 connect的OldCsv和Schema方法有什么区别?如果使用connect的方法应该怎样跳过标题行,并选取特定的列呢?
> 还是说只能在保存原数据表的时候去掉标题行?
> 期待您的解答。