def prod(spark_column: Column, spark_type: DataType) -> Column:
    if isinstance(spark_type, BooleanType):
        scol = F.min(F.coalesce(spark_column, SF.lit(True))).cast(LongType())
    elif isinstance(spark_type, NumericType):
        num_zeros = F.sum(F.when((spark_column == 0), 1).otherwise(0))
        sign = F.when(((F.sum(F.when((spark_column < 0), 1).otherwise(0)) % 2) == 0), 1).otherwise((- 1))
        scol = F.when((num_zeros > 0), 0).otherwise((sign * F.exp(F.sum(F.log(F.abs(spark_column))))))
        if isinstance(spark_type, IntegralType):
            scol = F.round(scol).cast(LongType())
    else:
        raise TypeError('Could not convert {} ({}) to numeric'.format(spark_type_to_pandas_dtype(spark_type), spark_type.simpleString()))
    return F.coalesce(scol, SF.lit(1))
def prod(spark_column: Column, spark_type: DataType) -> Column:
    if isinstance(spark_type, BooleanType):
        scol = F.min(F.coalesce(spark_column, SF.lit(True))).cast(LongType())
    elif isinstance(spark_type, NumericType):
        num_zeros = F.sum(F.when((spark_column == 0), 1).otherwise(0))
        sign = F.when(((F.sum(F.when((spark_column < 0), 1).otherwise(0)) % 2) == 0), 1).otherwise((- 1))
        scol = F.when((num_zeros > 0), 0).otherwise((sign * F.exp(F.sum(F.log(F.abs(spark_column))))))
        if isinstance(spark_type, IntegralType):
            scol = F.round(scol).cast(LongType())
    else:
        raise TypeError('Could not convert {} ({}) to numeric'.format(spark_type_to_pandas_dtype(spark_type), spark_type.simpleString()))
    return F.coalesce(scol, SF.lit(1))