PySpark:重新排列彼此之下的行或列

时间:2018-06-05 14:43:57

标签: python apache-spark pyspark apache-spark-sql

我的原始数据框如下所示:



<style type="text/css">
.tg  {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-baqh{text-align:center;vertical-align:top}
</style>
<table class="tg">
  <tr>
    <th class="tg-baqh"><span style="font-weight:bold">Data-Col-1</span></th>
    <th class="tg-baqh"><span style="font-weight:bold">Data-Col-2</span></th>
    <th class="tg-baqh"><span style="font-weight:bold">...</span></th>
    <th class="tg-baqh"><span style="font-weight:bold">Data-Col-2500</span></th>
  </tr>
  <tr>
    <td class="tg-baqh">78</td>
    <td class="tg-baqh">12</td>
    <td class="tg-baqh"></td>
    <td class="tg-baqh">null</td>
  </tr>
  <tr>
    <td class="tg-baqh">1</td>
    <td class="tg-baqh">null</td>
    <td class="tg-baqh"></td>
    <td class="tg-baqh">89</td>
  </tr>
  <tr>
    <td class="tg-baqh">...</td>
    <td class="tg-baqh"></td>
    <td class="tg-baqh"></td>
    <td class="tg-baqh"></td>
  </tr>
</table>
&#13;
&#13;
&#13;

我希望得到以下内容:

&#13;
&#13;
<style type="text/css">
.tg  {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-baqh{text-align:center;vertical-align:top}
.tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
.tg .tg-apku{background-color:#f8a102;text-align:center;vertical-align:top}
.tg .tg-l5iw{background-color:#32cb00;text-align:center;vertical-align:top}
</style>
<table class="tg">
  <tr>
    <th class="tg-amwm">values</th>
  </tr>
  <tr>
    <td class="tg-apku">78</td>
  </tr>
  <tr>
    <td class="tg-apku">12</td>
  </tr>
  <tr>
    <td class="tg-apku">...</td>
  </tr>
  <tr>
    <td class="tg-apku">null</td>
  </tr>
  <tr>
    <td class="tg-l5iw">1</td>
  </tr>
  <tr>
    <td class="tg-l5iw">null</td>
  </tr>
  <tr>
    <td class="tg-l5iw">...</td>
  </tr>
  <tr>
    <td class="tg-l5iw">89<br></td>
  </tr>
  <tr>
    <td class="tg-baqh">...</td>
  </tr>
</table>
&#13;
&#13;
&#13;

可以看出,橙色部分对应于第一行。绿色部分到第二行等等。

现在,我的问题是,你如何在PySpark中实现这一目标。问题是我有很多行和列,所以当整个表重新排列时,最终的数据帧大约有600万行。

我的第一种方法是在原始数据框中添加一个id列,然后创建较小的2500个数据帧(每列一个),由两列(id +其他列)组成,然后将它们堆叠在彼此之下。然后,根据id对它们进行排序,但是,我总是耗尽内存。

因此,有没有办法将每一行转换为一个单独的数据帧,然后将它们直接堆叠在一起?

0 个答案:

没有答案