我正在尝试验证我的 Spark 数据集中的某些内容。我正在获取在聚类算法中使用的一组列,生成一个特征列,然后对数据进行标准化。 Spark 可以很好地完成这一切。但是,我注意到,当我将数据过滤结果转换为 pandas 数据帧时,spark 的 toPandas、head 和 first 函数围绕这些值。这意味着它们很难绘制,并且对 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])
如果我使用 head 或 toPandas 函数,也会发生同样的事情。我想要弄清楚的是生成的值是否唯一,以及我是否可以将它们输出为完整的小数位。内置的 KMeans 算法似乎会产生一个输出,表明它们是唯一的,但我想确定一下。另外,由于我使用的算法也不存在于 Spark 中,因此我需要将预运行过滤后的数据输出到 pandas DF 中才能使用它。当我这样做时,标准化数据是无用的,所以我必须使用诸如最小-最大标量之类的东西来获得类似的东西。但是,我担心这会在数据中引入偏差,因为算法之间的标准化并不相同。
您可以使用以下函数打印完整的 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)