불꽃은 열을 선택합니 반환을 참조의 오래된 데이터 프레임

0

질문

나는 다음과 같은 코드를 사용:

random = [("ABC",xx, 1), 
          ("DEF",yy,1), 
          ("GHI",zz, 0) 
         ]
randomColumns = ["name","id", "male"]
randomDF = spark.createDataFrame(data=random, schema = randomColumns)
test_df = randomDF.select("name", "id")
test_df.filter(f.col("male") == '1').show()

위의 코드를 것으로 예상 결과에 오류가 있기 때문에 test_df 라 선택하는 남성에서 열 원본 데이터 프레임. 놀랍게도 위의 쿼리가 실행 없이도 잘 어떤 오류가 및 출력을 다음과 같다:

+---------+-------+
|name     |     id|
+---------+-------+
|      abc|     xx|
|      def|     yy|
+---------+-------+

내가 원하는 논리를 이해하기 위해 무엇 뒤에 불꽃이 하고 있습니다. 당 spark 문서를 선택합 반환하는 새로운 데이터 프레임. 그런 다음 그것은 왜 아직도 사용할 수 있는 남성 컬럼 부모로부터 데이터 프레임.

2

최고의 응답

3

이로 인해 발생 DAG 에 의해 생성되는 불꽃. 일부 사업자(또는 transformers이)게으른 실행,그래서 그들은 포장을 위한 스파크를 최적화하 DAG.

이 예제에서,두 개의 주요 단계: select (나 project SQL 에서의 용어)첫째,고 filter 니다. 그러나 사실은,실행하는 경우, filter 먼저,다음 select기 때문에,그것은 더 효율적입니다.

지 확인할 수 있습니다 이 결론 explain() 방법:

test_df.filter(f.col("flag") == '1').explain()

출력됩니다:

== Physical Plan ==
*(1) Project [dept_name#0, dept_id#1L]
+- *(1) Filter (isnotnull(flag#2L) AND (flag#2L = 1))
   +- *(1) Scan ExistingRDD[dept_name#0,dept_id#1L,flag#2L]
2021-11-24 01:29:03
1

추가@chenzhongpu's 에 대답하십시오 참고는 정의한 경우에는 임시보기에 test_df쿼리가 실패할 것이다:

test_df.createOrReplaceTempView("test_df")
spark.sql("select * from test_df where flag = 1").show()
_Traceback (most recent call last): ...
:
pyspark.sql.utils.AnalysisException: u"cannot resolve '`flag`' given input columns: [test_df.dept, test_df.id]; line 1 pos 24;
'Project [*]
 +- 'Filter ('flag = 1)
   +- SubqueryAlias `test_df`
      +- Project [dept#0, id#2L]
         +- LogicalRDD [dept#0, flag#1L, id#2L], false
 _

...기 select (=Project 노드에서 실행 계획)가 앞에 필터(시도를 통해 where 절).

2021-11-24 14:25:52

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................