
获得徽章 0
- #沸你不可#
队名:LOL玩多了起了个无畏竞巅峰
队员:@山花 @盐加泥鸭 @Asiawyz
今日分享:
怎么将数据很大的 csv 文件转为 parquet 格式的文件
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
def write_parquet_file():
csv_file = '/home/cloudam/mcule.csv'
parquet_file = '/home/cloudam/mcule.parquet'
chunksize = 100_000
csv_stream = pd.read_csv(csv_file, sep='\t', chunksize=chunksize, low_memory=False)
for i, chunk in enumerate(csv_stream):
print("Chunk", i)
if i == 0:
# Guess the schema of the CSV file from the first chunk
parquet_schema = pa.Table.from_pandas(df=chunk).schema
# Open a Parquet file for writing
parquet_writer = pq.ParquetWriter(parquet_file, parquet_schema, compression='snappy')
# Write CSV chunk to the parquet file
table = pa.Table.from_pandas(chunk, schema=parquet_schema)
parquet_writer.write_table(table)
parquet_writer.close()
if __name__ == "__main__":
write_parquet_file()展开评论2 - #沸你不可#
队名:LOL玩多了起了个无畏竞巅峰
队员:@山花 @LOL玩多了起了个无畏竞巅峰 @Asiawyz
今日分享:MySQL使用InnoDB引擎时 count(*) count(1) count(主键id) count(字段)谁快
1. count(主键id):InnoDB引擎会遍历整张表,把每一行的 id 值都取出来,返回给 server 层。server层拿到 id 后,判断是不可能为空的,就按行累加
2. count(1):InnoDB 引擎遍历整张表,但不取值。server层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加
3. count(字段):
字段定义 not null,一行行地从记录里读出这个字段,判断不能为 null,按行累加
字段定义允许为 null,执行的时候,判断到有可能是 null,还是要把值取出来再判断一下,不是 null 才累加
server层要什么字段,就返回什么字段
4. count(*):专门做了优化?什么优化?count(*)肯定不是 null,按行累加
count(字段) < count(主键id) < count(1) ≈ count(*)
所以尽量使用 count(*)
《MySQL实战45讲》笔记展开评论2