分割は、複数の行に分割され、前記pysparkのRDDプレス

データフレームは、マルチライン機能に区切りターンによってコラムによると、しかし、データフレームはので、ここで、RDDよりも多くのリソースを必要とすることは、複数の行にいくつかのRDD分割の列で最初のものである
のhttpsのデータフレーム参照://をpyspark.sql.functions.explodeのspark.apache.org/docs/2.3.1/api/python/pyspark.sql.html#pyspark.sql.DataFrame(COL)、pyspark.sql.functions.explode_outer(COL )、 pyspark.sql.functions.posexplode(COL)、pyspark.sql.functions.posexplode_outer(COL ) メソッドを切断する機能インターフェーススプリット

主flatMap(F、preservesPartitioning =偽)]、flatMapValues(f)の方法で使用されるRDD分割https://spark.apache.org/docs/2.3.1/api/python/pyspark.html#pyspark.RDD

パラメトリックおよび送信を分割するためのF flatMap関数呼び出し

x = sc.parallelize([("a", "x,y,z"), ("b", "p,r")])
x.flatMap(lambda x:[(x[0],x[1].split(",")[0]),(x[0],x[1].split(",")[1])]).collect() #取第二列的按‘,’号分隔前两个作为两行,但是对未知个数不太适用,而且实际生产因为数据不标准容易致使程序异常
[('a', 'x'), ('a', 'y'), ('b', 'p'), ('b', 'r')]

def itemsToRow(x):
	    list=[]
	    for value in x[1].split(","):
		    newrow=(x[0],value)
		    list.append(newrow)
		    return list
x.flatMap(lambda x:itemsToRow(x)).collect()#这样就将未知个数的有多少个元素就弄成多少行了

比較的単純なflatMapValuesは、単にラインコンテナ要素でvは分割Vに渡す(V K)であり、Vは留意されたいコンテナタイプ#####

x = sc.parallelize([("a", ["x", "y", "z"]), ("b", ["p", "r"])])
def f(x): return x
x.flatMapValues(f).collect()
[('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'p'), ('b', 'r')]

vはコンテナタイプではない場合、我々は例えば、Bangfa招いコンテナタイプを考える必要があります:

x = sc.parallelize([("a", "x,y,z"), ("b", "p,r")])
def f(x): return x
x.map(lambda x:(x[0],x[1].split(","))).flatMapValues(f).collect()
[('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'p'), ('b', 'r')]

この方法combineByKey複数の行は、あなたが値する、1行が繰り返しプレイと組み合わせる反対の機能メカニズム、再生可能な多くのトリックは、強力な組み合わせを呼びかけていることになりました

おすすめ

転載: blog.csdn.net/u010720408/article/details/94436873