I have created a parquet file with three columns (id, author, title) from database and want to read the parquet file with a condition (title='Learn Python'). Below mentioned is the python code which I am using for this POC.
import pyarrow as pa
import pyarrow.parquet as pq
import pandas as pd
import pyodbc
def write_to_parquet(df, out_path, compression='SNAPPY'):
arrow_table = pa.Table.from_pandas(df)
if compression == 'UNCOMPRESSED':
compression = None
pq.write_table(arrow_table, out_path, use_dictionary=False,
compression=compression)
def read_pyarrow(path, nthreads=1):
return pq.read_table(path, nthreads=nthreads).to_pandas()
path = './test.parquet'
sql = "SELECT * FROM [dbo].[Book] (NOLOCK)"
conn = pyodbc.connect(r'Driver={SQL
Server};Server=.;Database=APP_BBG_RECN;Trusted_Connection=yes;')
df = pd.io.sql.read_sql(sql, conn)
write_to_parquet(df, path)
df1 = read_pyarrow(path)
How can I put a condition (title='Learn Python') in read_pyarrow method?
This is not yet supported. We intend to develop this functionality in the future. I recommend doing the filtering with pandas after the conversion from Arrow table.
Filters are now available read_table
table = pq.read_table(
df, filters=[("title", "in", {'Learn Python'}),
("year", ">=", 1950)]
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With