pandas 从spark Dataframe 中提取一个值,而不对该值进行舍入

fnvucqvd  于 2023-09-29  发布在  Spark
关注(0)|答案(1)|浏览(123)

我想验证一下我的spark数据集。我在聚类算法中使用一组列,生成一个特征列,然后对数据进行标准化。Spark做得很好。然而,我注意到,当我将数据过滤的结果转换为pandas Dataframe 时,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中以使用它。当我这样做的时候,规范化的数据是无用的,所以我必须使用类似最小-最大标量的东西来得到类似的东西。然而,我担心这会在数据中引入偏差,因为不同算法的标准化是不一样的。

3npbholx

3npbholx1#

您可以使用以下函数打印完整的pandas dataframe,而不进行任何列截断。

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)

相关问题