从 Spark 数据帧中提取值而不舍入该值

问题描述 投票:0回答:1

我正在尝试验证我的 Spark 数据集中的某些内容。我正在获取在聚类算法中使用的一组列,生成一个特征列,然后对数据进行标准化。 Spark 可以很好地完成这一切。但是,我注意到,当我将数据过滤结果转换为 pandas 数据帧时,spark 的 toPandasheadfirst 函数围绕这些值。这意味着它们很难绘制,并且对 Spark 之外的任何功能都毫无用处。有办法关掉这个吗

所以我执行以下操作:

    assembler_t = VectorAssembler(inputCols=['unixTime','value_hrf','value_raw'],           
    outputCol="features",handleInvalid="keep")
    result_t = assembler_t.transform(result)
    normalizer_t=Normalizer(inputCol='features', outputCol='normalized_features')
    result_t=normalizer_t.transform(result_t)

result_t.select('normalized_features').show()
的结果是一个如下所示的表格:

    | normalized_features|
    |--------------------|
    |[0.99999999999980...|
    |[0.99999999999980...|
    |[0.99999999999980...|
    |[0.99999999999979...|

你看到了第一个问题。这些值非常接近,需要大量的小数。此外,每行有三个值,但只显示一个。所以我想我只看一个:

result_t.first()['normalized_features']

不幸的是,这会产生以下结果:

DenseVector([1.0, -0.0, -0.0])

如果我使用 headtoPandas 函数,也会发生同样的事情。我想要弄清楚的是生成的值是否唯一,以及我是否可以将它们输出为完整的小数位。内置的 KMeans 算法似乎会产生一个输出,表明它们是唯一的,但我想确定一下。另外,由于我使用的算法也不存在于 Spark 中,因此我需要将预运行过滤后的数据输出到 pandas DF 中才能使用它。当我这样做时,标准化数据是无用的,所以我必须使用诸如最小-最大标量之类的东西来获得类似的东西。但是,我担心这会在数据中引入偏差,因为算法之间的标准化并不相同。

pandas pyspark cluster-analysis rounding
1个回答
0
投票

您可以使用以下函数打印完整的 pandas 数据框,而无需任何列截断。

def print_pandas(dataframe_given):
    with pd.option_context('display.max_rows', None,'display.max_columns', None, 'expand_frame_repr', False, 'display.max_colwidth', None):
        print("Given dataframe name")
        print(dataframe_given)
© www.soinside.com 2019 - 2024. All rights reserved.