假设:
我从数据框中读取每一列,并以列为参数调用该函数。
输出应保存为表格。 我怎样才能做到这一点?
答案 0 :(得分:1)
from pyspark.sql import Row
df = sc.parallelize(['a','b','c']).map(lambda row : Row(key=row)).toDF()
df.show()
+---+
|key|
+---+
| a|
| b|
| c|
+---+
def func (args):
# function that will return 5 multiple values
lista = Row(result=",".join([ args.key+str(x) for x in range(5)]))
return lista
new_table = df.rdd.map(func).toDF()
new_table.show()
+--------------+
| result|
+--------------+
|a0,a1,a2,a3,a4|
|b0,b1,b2,b3,b4|
|c0,c1,c2,c3,c4|
+--------------+
new_table.saveAsTable("results")
答案 1 :(得分:1)
如果函数返回相同类型的值,则在Scala中:
// functions
val mySplit = (value: String) => Array(value.split(","))
val mySplitUDF = udf(mySplit(_: String))
// data
val intialDF = sparkContext.parallelize(List("First,Second,Third")).toDF("initialColumn")
// transformations
val arrayDF = intialDF.select(mySplitUDF(col("initialColumn")).as("arrayColumn"))
val expodedDF = arrayDF.select(explode(col("arrayColumn")).as("explodedCol"))
val resultDF = expodedDF.select(
col("explodedCol").getItem(0).as("Col1"),
col("explodedCol").getItem(1).as("Col2"),
col("explodedCol").getItem(2).as("Col3")
)
resultDF.show(false)
结果是:
+-----+------+-----+
|Col1 |Col2 |Col3 |
+-----+------+-----+
|First|Second|Third|
+-----+------+-----+
在Python上可以用类似的方式实现