def are_schemas_equal(new_df, old_df, *, partition_col=None):
    """
    Check if two dataframe schemas are exactly the same, modulo the partition_col
    :param new_df: The new Spark DataFrame
    :param old_df: The old Spark DataFrame, that can contain `partition_col`
    :param str partition_col: The name of a column that might be only in `old_df`
    :return: A boolean indicating if the schemas are equal
    """
    if not partition_col:
        partition_col_set = set()
    else:
        partition_col_set = {partition_col}
    old_dtypes = dict(old_df.dtypes)
    new_dtypes = dict(new_df.dtypes)
    new_keys = new_dtypes.keys() - old_dtypes.keys() - partition_col_set
    if new_keys:
        return False
    else:
        return all(value == old_dtypes[key]
                   for key, value in new_dtypes.items() if key != partition_col)