Apache spark splitspark数据帧列
我用的是spark 2.3 我有这样一个数据帧(在其他情况下,c0可能包含20个内部字段): 我想拆分_c0,并创建新的数据帧,如下所示:Apache spark splitspark数据帧列,apache-spark,dataframe,pyspark,rdd,Apache Spark,Dataframe,Pyspark,Rdd,我用的是spark 2.3 我有这样一个数据帧(在其他情况下,c0可能包含20个内部字段): 我想拆分_c0,并创建新的数据帧,如下所示: col1 |col2 |col3 |col4 ----------------------------- 1.1 |1.2 |4.55 | a 4.44 |3.1 |9.99 | b 1.2 |99.88 |10.1 | x 我知道如何使用getItem()解决此问题: 但我希望找到一种不同的方法来解决这个问题,因为c0可能包含3个以上的内部
col1 |col2 |col3 |col4
-----------------------------
1.1 |1.2 |4.55 | a
4.44 |3.1 |9.99 | b
1.2 |99.88 |10.1 | x
我知道如何使用getItem()解决此问题:
但我希望找到一种不同的方法来解决这个问题,因为c0可能包含3个以上的内部列
有没有办法使用flatMap生成df
有没有办法将df[1]作为df[0]的内部字段插入
有没有办法使用df[0].getItem()来返回所有内部字段
有没有更简单的方法来生成数据帧
任何帮助都将不胜感激
感谢您使用df
split
函数和regex模式作为空白(“\\s+”
)。
文件:
然后你可以使用数组列上的
getItem
来获得特定的字段值。请分享你的DataFramework的结构可能是pault的副本,我希望找到一种不使用getItem()的简单方法,因为我有许多内部字段
col1 |col2 |col3 |col4
-----------------------------
1.1 |1.2 |4.55 | a
4.44 |3.1 |9.99 | b
1.2 |99.88 |10.1 | x
df = originalDf.rdd.map(lambda x: (re.split(" +",x[0]),x[1])).toDF()
# now, df[0] is a array of string , and df[1] is string
df = df.select(df[0].getItem(0), df[0].getItem(1), df[0].getItem(2), df[1])
def split(str, pattern):
"""
Splits str around pattern (pattern is a regular expression).
.. note:: pattern is a string represent the regular expression.
>>> df = spark.createDataFrame([('ab12cd',)], ['s',])
>>> df.select(split(df.s, '[0-9]+').alias('s')).collect()
[Row(s=[u'ab', u'cd'])]
"""
sc = SparkContext._active_spark_context
return Column(sc._jvm.functions.split(_to_java_column(str), pattern))