我最近在研究spark。
我需要对spark dataframe的所有列执行修剪操作。
如果我们知道列名,是的,我们可以手动 withcolumn[trim()]
表演吧。
但是如果我们不知道列名,我们怎么做到呢?。
所以我在网上搜索了这个,在我找到的某个地方,首先转换rdd,然后再转换成Dataframe。
借助于此,我编写了一个函数,它获取Dataframe行,并对行中的每一列执行修剪操作。它将此列结果累加到一个数组中。
最后它返回一个array.trimmed行。
它将与dataframe中的所有行相同。
之后我创建了一个二维数组,它就像dataframe.structure一样 Array[Array[String]]
。我从这个二维数组的函数中累加这些数组行。
之后呢 sc.parallalize()
在这个函数的帮助下,我创建了一个 RDD[Array[String]]
但问题是当我转换成Dataframe时。
+--------------------+
| value|
+--------------------+
|[/Desktop/demo.tx...|
|[/Desktop/mobile....|
|[/Desktop/metadat...|
|[/Desktop/Employe...|
+--------------------+
分配到一列的数组行。
但当我们做Map函数时
df.map(x=>(x(0),x(1),x(2),x(3))
+--------------------+------------+-----------+---+
| _1| _2| _3| _4|
+--------------------+------------+-----------+---+
|C:/Users//O.........|fruits_table| Id|pos|
|C:/Users//O.........| mobile| id|csv|
|C:/Users//O.........| metadata|column_name|csv|
|C:/Users//O.........| employee| EmpId|pos|
+--------------------+------------+-----------+---+
这就是我想要的。
问题是我想转换 RDD[Array[String]]
进入 RDD[(String,String,String,String)]
如果有人知道答案,请告诉我?谢谢
暂无答案!
目前还没有任何答案,快来回答吧!