跨列组合值以及pyspark和旋转
我有一个像这样的pypark df:跨列组合值以及pyspark和旋转,pyspark,pivot,Pyspark,Pivot,我有一个像这样的pypark df: +-------+-------+-----------+-----------+-----------+-----------+-----------+-----------+ | SEQ_ID|TOOL_ID|kurtosis_1m|kurtosis_2m|kurtosis_3m|kurtosis_4m|kurtosis_5m|kurtosis_6m| +-------+-------+-----------+-----------+----------
+-------+-------+-----------+-----------+-----------+-----------+-----------+-----------+
| SEQ_ID|TOOL_ID|kurtosis_1m|kurtosis_2m|kurtosis_3m|kurtosis_4m|kurtosis_5m|kurtosis_6m|
+-------+-------+-----------+-----------+-----------+-----------+-----------+-----------+
|3688539| 99725| 6.7484| 6.2753| 6.2055| 7.2076| 7.0501| 7.5099|
|3689076| 99705| 4.8109| 4.3774| 4.1131| 4.4084| 4.1568| 4.4445|
+-------+-------+-----------+-----------+-----------+-----------+-----------+-----------+
我需要以这样一种方式对其进行透视,以得到如下数据帧:
+-------+-------+-----------+
| SEQ_ID|TOOL_ID|kurtosis |
+-------+-------+-----------+
|3688539| 99725| 6.7484|
|3688539| 99725| 6.2753|
|3688539| 99725| 6.2055|
|3688539| 99725| 7.2076|
|3688539| 99725| 7.0501|
|3688539| 99725| 7.5099|
|3689076| 99705| 4.8109|
|3689076| 99705| 4.3774|
|3689076| 99705| 4.1131|
|3689076| 99705| 4.4084|
|3689076| 99705| 4.1568|
|3689076| 99705| 4.4445|
+-------+-------+-----------+
我想一种方法是将峰度列创建为数组列,然后将其分解。如何将一个数据帧中的列的值作为一个数组组合成一个列。
我还有其他的专栏,比如mean_1m,mean_2m等等。。。我需要以同样的方式旋转。
有什么见解吗?
谢谢您可以创建一个数据帧数组并合并它们
首先,确定峰度列:
现在创建一个数据帧数组,其数量等于峰度列的数量:
输出:
+-------+-------+--------+
| seq_id|tool_id|kurtosis|
+-------+-------+--------+
|3688539| 99725| 6.7484|
|3688539| 99725| 7.2076|
|3688539| 99725| 6.2753|
|3688539| 99725| 6.2055|
|3688539| 99725| 7.5099|
|3688539| 99725| 7.0501|
|3689076| 99705| 4.4084|
|3689076| 99705| 4.1131|
|3689076| 99705| 4.8109|
|3689076| 99705| 4.4445|
|3689076| 99705| 4.3774|
|3689076| 99705| 4.1568|
+-------+-------+--------+
您可以对其他集合列(如mean_1m等)采用类似的方法。将它们重新联接并避免重复的一种方法是在联接之前使用row_number和单调递增的_id。如果您需要这段代码,请告诉我。您可以创建一个数据帧数组并合并它们
首先,确定峰度列:
现在创建一个数据帧数组,其数量等于峰度列的数量:
输出:
+-------+-------+--------+
| seq_id|tool_id|kurtosis|
+-------+-------+--------+
|3688539| 99725| 6.7484|
|3688539| 99725| 7.2076|
|3688539| 99725| 6.2753|
|3688539| 99725| 6.2055|
|3688539| 99725| 7.5099|
|3688539| 99725| 7.0501|
|3689076| 99705| 4.4084|
|3689076| 99705| 4.1131|
|3689076| 99705| 4.8109|
|3689076| 99705| 4.4445|
|3689076| 99705| 4.3774|
|3689076| 99705| 4.1568|
+-------+-------+--------+
您可以对其他集合列(如mean_1m等)采用类似的方法。将它们重新联接并避免重复的一种方法是在联接之前使用row_number和单调递增的_id。如果您需要这段代码,请告诉我。您可以使用将多个列合并到一个数组中,然后(如您在问题中所述)数组
从pyspark.sql导入函数为F
cols=[x代表df.schema.names中的x,如果峰度在x中]
df.带柱峰度,F.爆炸F.阵列色\
.drop*cols\
显示
输出:
+-------+-------+--------+
| seq_id|tool_id|kurtosis|
+-------+-------+--------+
|3688539| 99725| 6.7484|
|3688539| 99725| 7.2076|
|3688539| 99725| 6.2753|
|3688539| 99725| 6.2055|
|3688539| 99725| 7.5099|
|3688539| 99725| 7.0501|
|3689076| 99705| 4.4084|
|3689076| 99705| 4.1131|
|3689076| 99705| 4.8109|
|3689076| 99705| 4.4445|
|3689076| 99705| 4.3774|
|3689076| 99705| 4.1568|
+-------+-------+--------+
+----+----+----+
|序列号|工具号|峰度|
+----+----+----+
|3688539| 99725| 6.7484|
|3688539| 99725| 6.2753|
|3688539| 99725| 6.2055|
|3688539| 99725| 7.2076|
|3688539| 99725| 7.0501|
|3688539| 99725| 7.5099|
|3689076| 99705| 4.8109|
|3689076| 99705| 4.3774|
|3689076| 99705| 4.1131|
|3689076| 99705| 4.4084|
|3689076| 99705| 4.1568|
|3689076| 99705| 4.4445|
+----+----+----+
您可以使用将多个列组合到一个数组中,然后(如您在问题中所述)将该数组
从pyspark.sql导入函数为F
cols=[x代表df.schema.names中的x,如果峰度在x中]
df.带柱峰度,F.爆炸F.阵列色\
.drop*cols\
显示
输出:
+-------+-------+--------+
| seq_id|tool_id|kurtosis|
+-------+-------+--------+
|3688539| 99725| 6.7484|
|3688539| 99725| 7.2076|
|3688539| 99725| 6.2753|
|3688539| 99725| 6.2055|
|3688539| 99725| 7.5099|
|3688539| 99725| 7.0501|
|3689076| 99705| 4.4084|
|3689076| 99705| 4.1131|
|3689076| 99705| 4.8109|
|3689076| 99705| 4.4445|
|3689076| 99705| 4.3774|
|3689076| 99705| 4.1568|
+-------+-------+--------+
+----+----+----+
|序列号|工具号|峰度|
+----+----+----+
|3688539| 99725| 6.7484|
|3688539| 99725| 6.2753|
|3688539| 99725| 6.2055|
|3688539| 99725| 7.2076|
|3688539| 99725| 7.0501|
|3688539| 99725| 7.5099|
|3689076| 99705| 4.8109|
|3689076| 99705| 4.3774|
|3689076| 99705| 4.1131|
|3689076| 99705| 4.4084|
|3689076| 99705| 4.1568|
|3689076| 99705| 4.4445|
+----+----+----+
我认为使用内置的pyspark数组函数可能更容易。感谢您的解决方案Cena。我真的很感激!我认为使用内置的pyspark数组函数可能更容易。感谢您的解决方案Cena。我真的很感激!x中的if字符串拾取所有带字母的单词。我如何让它选择准确的单词?例如,若x中的“UL”选择了名为UL和MUL的列,我只希望它选择UL@thentangler用==替换in,就像在正常if条件下一样。可以找到一些示例,x中的if字符串拾取所有带字母的单词。我如何让它选择准确的单词?例如,若x中的“UL”选择了名为UL和MUL的列,我只希望它选择UL@thentangler用==替换in,就像在正常if条件下一样。可以找到一些例子