如何在spark scala(非pyspark)中使用melt函数

2024-04-29 14:13:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想读取一个tsv文件并转换为特定的模式,然后将结果转换为tsv。 我尝试使用pandas在python中编写代码。但是我不能运行它,因为它需要很多内存

我想在spark scala做同样的事情。但scala中没有熔融函数

我的python代码:

import pandas as pd
import string


dir = "related_path"

file = 'file_name.tsv'
   
    file_in = dir + file
    file_out= dir+'result.tsv'
    df = pd.read_csv(file_in,sep='\t')
    df1 = **df.melt(id_vars='Unnamed: 0')**
    df1.columns = ['col1', 'col2', 'col3']
    df1.index.name = 'index'
    print(df1)
    df1.to_csv(file_out, index=None, sep='\t', mode='a')

TSV不包含标题

tsv文件的数据帧(df):

           Unnamed: 0    A-4    A-5      Unnamed: 3  A-12
index  
0             AB          NaN    0.019    NaN         0.10

1             AC         0.017  0.140     0.144       0.18

2             NaN        0.050  0.400     NaN         0.17

3             AE         0.890  0.240    0.450        0.13

Unnamed: 0    A-4    A-5      Unnamed: 3  A-12 (no header) is also a row

输出数据帧(df1):

      col1        col2   col3
index                        
0       AB         A-4    NaN

1       AC         A-4  0.017

2      NaN         A-4  0.050

3       AE         A-4  0.890

4       AB         A-5  0.019

5       AC         A-5  0.140

6      NaN         A-5  0.400

7       AE         A-5  0.240

8       AB  Unnamed: 3    NaN

9       AC  Unnamed: 3  0.144

10     NaN  Unnamed: 3    NaN

11      AE  Unnamed: 3  0.450

12      AB        A-12  0.100

13      AC        A-12  0.180

14     NaN        A-12  0.170

15      AE        A-12  0.130

df.melt(id_vars='Unnamed: 0')是转换为输出数据帧的代码

如何在scala中实现,因为没有内置的熔化功能

复杂性不应该是n^2


Tags: 文件数据代码dfindexabtsvdir