Python でハイブから寄木細工のテーブルを処理しようとしていますが、いくつかのデータ型の問題に直面しています。たとえば、ハイブ寄木細工のテーブルに aa フィールドがある場合
decimal (10,2)
、Pythonでファイルを読み込もうとしているときにジャンク値を与えます。これについていくつか入力してください。
適切な答えではありませんが、これは少し役立つかもしれないと思いました。たとえば、Parquet に格納する前に、PySpark ジョブにこのメソッドを使用して、Pandas DataFrames で問題なく読み取れるように小数を浮動小数点数に変換します。この場合、私は型を縮小していますが、あなたはアイデアを得る:
def shrink_types(df):
"""Reduce data size by shrinking the types"""
# Loop through the data type tuples and downcast the column
for t in df.dtypes:
column_name = t[0]
column_type = t[1]
if column_type == 'double' or 'decimal' in column_type:
df = df.withColumn(
column_name,
F.col(column_name).cast('float')
)
return df
次に、次の方法で呼び出します。
equities_df = shrink_types(equities_df)
# Save and restore so it actually runs
equities_df.write.mode('overwrite').parquet(
path='s3://bucket/path/dataset.parquet',
)